MVHyperConeFromNPoints

(mvcones.c:895)

Prototype:

  int MVHyperConeFromNPoints(MvarNormalConeStruct *MVCone,
                             MvarVecStruct * const *Vecs,
                             int n)


Description:

Consturcts a hyper cone in R^n through n vectors specified by Vecs.

Parameters:

MVCone: The result is to be placed here.
Vecs: Input vectors, prescribing n locations in R^n.
n: Size of array Vecs.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MVHyperPlaneFromNPoints MVHyperConeFromNPoints2 MVHyperConeFromNPoints3

Keywords:




MVHyperConeFromNPoints2

(mvcones.c:943)

Prototype:

  int MVHyperConeFromNPoints2(MvarNormalConeStruct *MVCone,
                              MvarVecStruct * const *Vecs,
                              int m)


Description:

Consturcts a hyper cone in R^n through m (m < n) vectors specified by Vecs.

Parameters:

MVCone: The result is to be placed here.
Vecs: Input vectors, prescribing m locations in R^n.
m: Size of array Vecs, m < n.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MVHyperPlaneFromNPoints MVHyperConeFromNPoints MVHyperConeFromNPoints3

Keywords:




MVHyperConeFromNPoints3

(mvcones.c:1039)

Prototype:

  int MVHyperConeFromNPoints3(MvarNormalConeStruct *MVCone,
                              MvarVecStruct * const *Vecs,
                              int m)


Description:

Consturcts a hyper cone in R^n through m (m < n) vectors specified by Vecs. Same functionality of MVHyperConeFromNPoints2 but more efficient, by solving for A A^T x = e, were e is [1, 1,..., 1], and having x being the linear combination of A's rows defining the cone axis.

Parameters:

MVCone: The result is to be placed here.
Vecs: Input vectors, prescribing m locations in R^n.
m: Size of array Vecs, m < n.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MVHyperPlaneFromNPoints MVHyperConeFromNPoints MVHyperConeFromNPoints2

Keywords:




MVHyperPlaneFromNPoints

(mvcones.c:842)

Prototype:

  int MVHyperPlaneFromNPoints(MvarPlaneStruct *MVPlane,
                              MvarVecStruct * const *Vecs,
                              int n)


Description:

Consturcts a hyper plane in R^n through n locations specified by Vecs.

Parameters:

MVPlane: The result is to be placed here.
Vecs: Input vectors, prescribing n locations in R^n.
n: Size of array Vecs.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MVHyperConeFromNPoints

Keywords:




MVarCrvDiameter

(crv_krnl.c:409)

Prototype:

  IPObjectStruct *MVarCrvDiameter(const CagdCrvStruct *Crv,
                                  CagdRType SubEps,
                                  CagdRType NumEps)


Description:

Computes the minimal and maximal diameter of the given curve. Let the input curve be C(t) and let f(t,r) = < C(t)-C(r), C(t)-C(r) >. Then, df/dt = df/dr = 0 find all the finite set of line segments that connects two points on the curve orthogonaly to the curve. The min/max diameter is part of this set.

Parameters:

Crv: Simple closed curve to compute the diameter for.
SubEps: Subdivision epsilon.
NumEps: Numeric marching tolerance.


Returned Value:

IPObjectStruct *: List of pair of parameter values between which the local diameter could be found.


See Also:

MVarCrvKernel MvarCrvAntipodalPoints

Keywords:




MVarCrvGammaKernel

(crv_krnl.c:75)

Prototype:

  MvarMVStruct *MVarCrvGammaKernel(const CagdCrvStruct *Crv, CagdRType Gamma)


Description:

Computes the gamma-kernel of the given curve, or the points in the plane that have a line of sight (rotated gamma degrees) with all the points of the curve. The curve is assumed to be closed and simple. Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane. Further let D'(t) = Rot(Gamma)[C'(t)]. Then, let F(u, v, t) = (C(t) - S(u, v)) x D'(t) (only the Z component of crossprod). The zero set of F projected over the XY plane defines all the domain that is NOT in the gamma-kernel of C(t).

Parameters:

Crv: Simple closed curve to compute its gamma-kernel.
Gamma: ngular deviation of the gamma-kernel, in degrees.


Returned Value:

MvarMVStruct *: The trivariate function F(u, v, t) whose zero set, projected on the XY plane, is the domain that is not in the gamma-kernel.


See Also:

MVarCrvKernelSilhouette MVarCrvKernel MVarCrvGammaKernelSrf

Keywords:




MVarCrvGammaKernelSrf

(crv_krnl.c:187)

Prototype:

  MvarMVStruct *MVarCrvGammaKernelSrf(const CagdCrvStruct *Crv,
                                      CagdRType ExtentScale,
                                      CagdRType GammaMax)


Description:

Constructs a gamma-kernel surfaces the given curve and as a function of gamma. Let the input curve be C(t). If C(t) is a linear curve then we compute the surface: Let P = (Px, Py) be the initial point and (Dx, Dy) the slope of the line. Then the constructed surface equals (ES == ExtentScale): X(r, Gamma) = Px + r * Dx * ES + r * Gamma * Dy * ES Y(r, Gamma) = Py - r * Gamma * Dx * ES + r * Dy * ES Z(r, Gamma) = Gamma If C(t) is a higher order, non linear, curve then we compute trivar: X(t, r, Gamma) = Cx(t) + r * Cx'(t) * ES + r * Gamma * Cy'(t) * ES Y(t, r, Gamma) = Cy(t) - r * Gamma * Cx'(t) * ES + r * Cy'(t) * ES Z(t, r, Gamma) = Gamma

Parameters:

Crv: Simple curve to compute its gamma-kernel surface.
ExtentScale: To scale the constructed surface as function of Gamma.
GammaMax: Max gamma deviation of the gamma-kernel, in degrees, for this curve. If negative, does so to opposite direction.


Returned Value:

MvarMVStruct *: The surface S(u, v) or trivariate function F(u, v, t) representing the gamma surface as a function of gamma.


See Also:

MVarCrvKernelSilhouette MVarCrvKernel MVarCrvGammaKernel

Keywords:




MVarCrvKernel

(crv_krnl.c:41)

Prototype:

  MvarMVStruct *MVarCrvKernel(const CagdCrvStruct *Crv)


Description:

Computes the kernel of the given curve, or the points in the plane that have a line of sight with all the points of the curve. The curve is assumed to be closed and simple. Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane. Then, let F(u, v, t) = (C(t) - S(u, v)) x C'(t) (only the Z component of crossprod). The zero set of F projected over the XY plane defines all the domain that is NOT in the kernel of C(t).

Parameters:

Crv: Simple closed curve to compute its kernel.


Returned Value:

MvarMVStruct *: The trivariate function F(u, v, t) whose zero set, projected on the XY plane, is the domain that is not in the kernel.


See Also:

MVarCrvKernelSilhouette MVarCrvGammaKernel

Keywords:




MVarCrvKernelSilhouette

(crv_krnl.c:352)

Prototype:

  IPObjectStruct *MVarCrvKernelSilhouette(const CagdCrvStruct *Crv,
                                          CagdRType Gamma,
                                          CagdRType SubEps,
                                          CagdRType NumEps)


Description:

Computes the kernel of the given curve, or the points in the plane that have a line of sight with all the points of the curve. The curve is assumed to be closed and simple. Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane. Then, let f(u, v, t) = < C(t) - S(u, v), C'(t) >. The zero set of f projected over the XY plane defines all the domain that is NOT in the kernel of C(t).

Parameters:

Crv: Simple closed curve to compute the silhouette of the kernel.
Gamma: Angular deviation of the gamma-kernel, in degrees.
SubEps: Subdivision epsilon.
NumEps: Numeric marching tolerance.


Returned Value:

IPObjectStruct *: The silhouette along the third, t, parameter of the trivariate function f(u, v, t).


See Also:

MVarCrvKernel MVarCrvGammaKernel

Keywords:




MVarIsCrvInsideCirc

(ms_circ.c:445)

Prototype:

  int MVarIsCrvInsideCirc(const CagdCrvStruct *Crv,
                          CagdRType Center[2],
                          CagdRType Radius,
                          CagdRType Tolerance)


Description:

Tests if a circle is contained in the given prescribed curve.

Parameters:

Crv: Curve to test for containment in the circle.
Center: Center of the circle to test against.
Radius: Radius of the circle to test against.
Tolerance: Of computation.


Returned Value:

int: TRUE if Crv is indeed inside the circle, FALSE otherwise.


See Also:

MvarMSCircOfThreeCurves MvarMSCircOfThreeCurves MvarMinSpanCirc

Keywords:




MVarMVNormalCone

(mvcones.c:1149)

Prototype:

  MvarNormalConeStruct *MVarMVNormalCone(const MvarMVStruct *MV)


Description:

Constructs a normal cone to a scalar multivariate MV. Note the normal space of the trivariate is assumed of dimension one, and the gradient of the multivariate is assumed to span the normal space. If the input multivariate is not scalar it is assumed to be of point type E(1+Dim), where Dim is the dimension of the MV. This scalar holds the gradient already in the Dim locations of the Points array in MV, in slots Points[2] to Points[Dim + 1], with Points[1] still holding the scalar field.

Parameters:

MV: Multivariate to derive a cone bounding its normal spaace.


Returned Value:

MvarNormalConeStruct *: A cone bounding the normal space ov MV, or NULL if failed (i.e. angular span of normal space too large).


See Also:

MvarMVConesOverlap

Keywords:




MVarProjNrmlPrmt2MVScl

(mvaccess.c:446)

Prototype:

  MvarMVStruct *MVarProjNrmlPrmt2MVScl(const CagdSrfStruct *Srf,
                                       const CagdSrfStruct *NrmlSrf,
                                       const MvarMVStruct *MVScl)


Description:

Performs the following steps in order: 1. Project Srf onto NrmlSrf by computing their inner product. 2. Promote the surface to a 4-variate with the surface the first 2 vars. 3. Scale the new 4-variate by a scalar product with MVScl.

Parameters:

Srf: Surface to project promote and scale.
NrmlSrf: ormal field to project along.
MVScl: Scale field to scale with.


Returned Value:

MvarMVStruct *: Resulting multivariate. *


Keywords:




MvarAdjacentSrfSrfInter

(selfintr.c:1678)

Prototype:

  MvarPtStruct *MvarAdjacentSrfSrfInter(const CagdSrfStruct *Srf1,
                                        const CagdSrfStruct *Srf2,
                                        CagdSrfBndryType Srf1Bndry,
                                        CagdRType SubdivTol,
                                        CagdRType NumericTol)


Description:

COmputes the intersection locations of two adjacent surfaces, that share an edge (a boundary curve). No intersections locations along the shared edge are returned. This case is common for adjacent patches in a B-spline surface.

Parameters:

Srf1, Srf2: The two adjacent surfaces to intersect.
Srf1Bndry: Boundary of Srf1 that is shared with Srf2. Srf2 Boundary Must be the reciprocal boundary. That is, if SrfBndry is UMin, Srf2's boundary will be UMax.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: List of intersection points, as (u, v) parameter pairs into the two surfaces' domains. Points in R^4.


See Also:

MvarBspSrfSelfInterDiagFactor MvarBzrSrfSelfInterDiagFactor BzrSrfFactorExtremeRowCol

Keywords:




MvarBBoxOfCrossProd

(mvar_aux.c:914)

Prototype:

  void MvarBBoxOfCrossProd(const MvarBBoxStruct *BBox1,
                           const MvarBBoxStruct *BBox2,
                           MvarBBoxStruct *DCrossBBox)


Description:

Computes the cross product of two bounding boxes in R^3, fetching the possible values that could result from the cross product of the original multiariate data these bounding boxes bound. Returned bbox is a vector bbox with bounds on those possible cross product values. Computation is done by computing min/max value for each axis of the pair of bbox's cross product.

Parameters:

BBox1, BBox2: Two bounding boxes to compute their cross product.
DCrossBBox: Where to place the returned result.


Returned Value:

void


See Also:

MvarMVBBox MvarBBoxOfDotProd

Keywords:




MvarBBoxOfDotProd

(mvar_aux.c:767)

Prototype:

  void MvarBBoxOfDotProd(const MvarBBoxStruct *BBox1,
                         const MvarBBoxStruct *BBox2,
                         MvarBBoxStruct *DProdBBox)


Description:

Computes the dot product of two bounding boxes in R^n, fetching the possible values that could result from the dot product of the original multiariate data these bounding boxes bound. Returned bbox is a scalar bbox with bounds on those possible dot product values. Computation is done by computing min/max value for each axis of the pair of bbox's and summing that up.

Parameters:

BBox1, BBox2: Two bounding boxes to compute their inner product.
DProdBBox: Where to place the returned result.


Returned Value:

void


See Also:

MvarMVBBox MvarBBoxOfCrossProd MvarBBoxOfDotProd2

Keywords:




MvarBBoxOfDotProd2

(mvar_aux.c:811)

Prototype:

  void MvarBBoxOfDotProd2(const MvarBBoxStruct *BBox1,
                          const MvarBBoxStruct *BBox2,
                          MvarBBoxStruct *DProdBBox)


Description:

Computes the dot product of two bounding boxes in R^n, fetching the possible values that could result from the dot product of the original multiariate data these bounding boxes bound. Returned bbox is a scalar bbox with bounds on those possible dot product values. Computation is done by enumerating all 2^n vertices of each bbox and computing their dot products. Slower than MvarBBoxOfDotProd.

Parameters:

BBox1, BBox2: Two bounding boxes to compute their inner product.
DProdBBox: Where to place the returned result.


Returned Value:

void


See Also:

MvarMVBBox MvarBBoxOfDotProd

Keywords:




MvarBsctApplyCC

(mvbiscon.c:253)

Prototype:

  int MvarBsctApplyCC(MvarVoronoiCrvStruct *Cv1,
                      MvarVoronoiCrvStruct **CCFreeCrvs)


Description:

Given the struct, this function says whether the bisector point satisfies the the following curvature constraints or not. Calculating the curvature constraints 1st constraint - 1 < 0 2nd constraint - 1 < 0

Parameters:

Cv1: VoronoiCrvStruct
CCFreeCrvs: VoronoiCrvStruct for storing the resultant curves


Returned Value:

int: TRUE or FALSE.


See Also:

MvarBsctApplyLL

Keywords:

bisectors


MvarBsctApplyLL

(mvbiscon.c:130)

Prototype:

  MvarVoronoiCrvStruct *MvarBsctApplyLL(MvarVoronoiCrvStruct *Cv1)


Description:

Given the struct, this function says whether the bisector point is to the left of the curve or not. Compute the constraints as dot products 1st constraint > 0 2nd constraint > 0

Parameters:

Cv1: VoronoiCrvStruct


Returned Value:

MvarVoronoiCrvStruct *: Returns the VoronoiCrvStruct after appying the LL constaint


See Also:

MvarBsctIsCurveLL

Keywords:

bisectors


MvarBsctCheckFootPtEqualsMinDistPt

(mvtrmpcr.c:741)

Prototype:

  CagdBType MvarBsctCheckFootPtEqualsMinDistPt(CagdCrvStruct *Crv1,
                                               CagdRType *Pt,
                                               CagdPType BP)


Description:

Given the Crv1, point Pt and the Bisector point (BP), this function says BP's footpoint is the minimum distance point to Crv1. Uses the function SymbDistCrvPoint from symb_lib.

Parameters:

Crv1: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
BP: isector point - CagdPType.


Returned Value:

CagdBType: Returns TRUE or FALSE.


See Also:

SymbDistCrvPoint

Keywords:




MvarBsctComputeCrvPtBis

(mvtrmpcr.c:226)

Prototype:

  CagdPtStruct *MvarBsctComputeCrvPtBis(CagdCrvStruct *Crv,
                                        CagdRType *Pt,
                                        CagdRType t)


Description:

Given a Crv and a Pt, this function computes the point on the bisector using determinants for a particular parameter t on the curve.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
t: arameter on the curve Crv - CagdRType.


Returned Value:

CagdPtStruct *: The identified bisector point.


See Also:

SymbCrvPtBisectorCrv2D

Keywords:




MvarBsctComputeDenomOfP

(mvtrmbis.c:56)

Prototype:

  void MvarBsctComputeDenomOfP(CagdCrvStruct *Crv1Inp,
                               CagdCrvStruct *Crv2Inp,
                               CagdSrfStruct **DenomOut)


Description:

Computes the denominator of the bisector surface F3 of two given 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:

Crv1Inp, Crv2Inp: wo curves to compute bisectors for. Assumes E2 curves.
DenomOut: he resulting denominator surface is stored here.


Returned Value:

void


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf2 SymbCrvBisectorsSrf SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D.

Keywords:

bisectors skeleton


MvarBsctComputeF3

(mvtrmbis.c:149)

Prototype:

  void MvarBsctComputeF3(CagdCrvStruct *Crv1Inp,
                         CagdCrvStruct *Crv2Inp,
                         CagdCrvStruct **Crv1Coerced,
                         CagdCrvStruct **Crv2Coerced,
                         CagdSrfStruct **F3,
                         CagdSrfStruct **L1,
                         CagdSrfStruct **L2,
                         CagdSrfStruct **CC1,
                         CagdSrfStruct **CC2)


Description:


Computes the bisector surface definition of two curves. 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:

Crv1Inp, Crv2Inp: wo curves to compute bisectors for. Assumes E2 curves.
Crv1Coerced: .S.F.I.
Crv2Coerced: .S.F.I.
F3: The resulting bisector surface is stored here.
L1: N.S.F.I.
L2: N.S.F.I.
CC1: N.S.F.I.
CC2: N.S.F.I.


Returned Value:

void


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf2 SymbCrvBisectorsSrf SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D

Keywords:

bisectors skeleton


MvarBsctComputeLowerEnvelope

(mvlowenv.c:1073)

Prototype:

  void MvarBsctComputeLowerEnvelope(MvarVoronoiCrvStruct *InputCurves,
                                    MvarVoronoiCrvStruct **LowerEnvelope)


Description:


Given the monotone curves, compute the lower envelope. This is the main calling function. The current implementation is an improved version that uses the auxilary MvarLECrvStruct structure for efficiency and robustness (less solver calls).

Parameters:

InputCurves: A MvarVoronoiCrvStruct of monotone pieces.
LowerEnvelope: A MvarVoronoiCrvStruct of lower envelope.


Returned Value:

void:


See Also:

MvarBsctComputeLowerEnvelopeAux MvarBsctComputeLowerEnvelopeOfOverlap MvarBsctMergeLowerEnvelopes MvarBsctSplitEnvelope1AtEnvelope2

Keywords:




MvarBsctComputeXYFromBisTR

(mvtrmbis.c:483)

Prototype:

  CagdRType *MvarBsctComputeXYFromBisTR(CagdCrvStruct *Crv1,
                                        CagdRType t,
                                        CagdCrvStruct *Crv2,
                                        CagdRType r)


Description:

Computes the bisector point given tr-values

Parameters:

Crv1: First curve.
t: Parameter value of first curve.
Crv2: Second curve.
r: Parameter value of second curve.


Returned Value:

CagdRType *: Bisector point from given tr.


Keywords:




MvarBsctCrvPtCurvature

(mvtrmpcr.c:492)

Prototype:

  CagdCrvStruct *MvarBsctCrvPtCurvature(CagdCrvStruct *Crv,
                                        CagdRType *Pt,
                                        CagdRType Alpha)


Description:

Given the struct, this function says whether the bisector point satisfies the Curvature constraint.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
Alpha: arameter of the alpha-sector - CagdRType. 0.5 for bisector.


Returned Value:

CagdCrvStruct *: CagdCrvStruct of the resultant.


See Also:

MvarBsctCrvPtLeft

Keywords:




MvarBsctCrvPtLeft

(mvtrmpcr.c:289)

Prototype:

  CagdCrvStruct *MvarBsctCrvPtLeft(CagdCrvStruct *Crv,
                                   CagdRType *Pt,
                                   CagdRType Alpha)


Description:

Given the struct, this function says whether the bisector point satisfies the Left constraint.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
Alpha: arameter of the alpha-sector - CagdRType. 0.5 for bisector.


Returned Value:

CagdCrvStruct *: CagdCrvStruct of the resultant.


See Also:

MvarBsctCrvPtCurvature

Keywords:




MvarBsctCurveLeft

(mvvorcrv.c:262)

Prototype:

  void MvarBsctCurveLeft(MvarVoronoiCrvStruct *Cv, MvarPtStruct *Res)


Description:

A Geometric Primitive Function that returns the leftmost point of Cv.

Parameters:

Cv: Input curve.
Res: Output stored here.


Returned Value:

void


See Also:

MvarBsctCurveRight

Keywords:




MvarBsctCurveRight

(mvvorcrv.c:360)

Prototype:

  void MvarBsctCurveRight(MvarVoronoiCrvStruct *Cv, MvarPtStruct *Res)


Description:

A Geometric Primitive Function that returns the rightmost point of Cv.

Parameters:

Cv: nput curve
Res: uput stored here


Returned Value:

void


See Also:

MvarBsctCurveLeft

Keywords:




MvarBsctCv1IsYSmallerAt

(mvvorcrv.c:480)

Prototype:

  int MvarBsctCv1IsYSmallerAt(MvarVoronoiCrvStruct *Cv1,
                              MvarVoronoiCrvStruct *Cv2,
                              MvarPtStruct *MidPoint)


Description:

A Geometric Primitive Function that identifies whether Cv1 has Y min. at given mid-point parameter, assuming both curves are in range.

Parameters:

Cv1, Cv2: nput curves.
MidPoint: id-point parameter.


Returned Value:

int: Returns TRUE or FALSE.


Keywords:




MvarBsctDenomPtCrvBis

(mvtrmpcr.c:85)

Prototype:

  CagdCrvStruct *MvarBsctDenomPtCrvBis(CagdCrvStruct *Crv,
                                       CagdPType Pt,
                                       CagdRType Alpha)


Description:

Computes the denominator of the alpha-/bi-sector curve of a planar curve and a point, all in the XY plane. The result is the denominator of 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 saught bisector.

Parameters:

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


MvarBsctGetAllIntersectionPoints

(mvvorcrv.c:899)

Prototype:

  void MvarBsctGetAllIntersectionPoints(MvarVoronoiCrvStruct *Cv1,
                                        MvarVoronoiCrvStruct *Cv2,
                                        MvarPtStruct **Points)


Description:

A Geometric Primitive Function that computes the equidistant points of three curves Cv1, Cv2 and Cv2 (third one also the second curve). Currently implemented just by calling Skel2DEqPts3Crvs (and purges away solutions). ToDo: implement a more efficient version, based on the already calculated F3.

Parameters:

Cv1, Cv2: nput curves.
Points: The resultant points.


Returned Value:

void


See Also:

MvarBsctSkel2DEqPts3Crvs

Keywords:




MvarBsctIsCrvLeftToLine

(mvtrmpcr.c:1111)

Prototype:

  CagdRType MvarBsctIsCrvLeftToLine(CagdCrvStruct *Crv,
                                    CagdRType *Pt,
                                    CagdPType LeftNormal)


Description:

This function returns the value of the cross product between two vectors. First vector is between the point Pt and the midpoint of Crv and the second one is between the point and the LeftNormal.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The discontinuity point on Crv.
LeftNormal: Left normal at the point Pt.


Returned Value:

CagdRType: Return the value of the expression.


See Also:

MvarBsctTrimCrvPt

Keywords:




MvarBsctIsCurveLL

(mvbiscon.c:38)

Prototype:

  int MvarBsctIsCurveLL(MvarVoronoiCrvStruct *Cv)


Description:

Given the struct, this function says whether the bisector point is to the left of the curve or not. Compute the constraints as dot products 1st constraint > 0 2nd constraint > 0

Parameters:

Cv: MvarVoronoiCrvStruct


Returned Value:

int: TRUE or FALSE.


See Also:

MvarBsctApplyLL

Keywords:

bisectors


MvarBsctIsXSmaller

(mvvorcrv.c:179)

Prototype:

  int MvarBsctIsXSmaller(MvarPtStruct *P1, MvarPtStruct *P2)


Description:

A Geometric Primitive Function that identifies which x-coord of the two points P1 and P2 is smaller.

Parameters:

P1, P2: oints as input.


Returned Value:

int: Returns true or false.


Keywords:




MvarBsctNewFindZeroSetOfSrfAtParam

(mvsplmon.c:203)

Prototype:

  MvarPtStruct *MvarBsctNewFindZeroSetOfSrfAtParam(CagdSrfStruct *Srf,
                                                   CagdRType Param,
                                                   CagdSrfDirType Dir,
                                                   CagdRType MvarBsctSubdivTol,
                                                   CagdRType MvarBsctNumerTol,
                                                   CagdBType ShouldCheckEndPoints)


Description:

Find the zeroset value at the given paramter of the given surface

Parameters:

Srf: Implicit surface definition.
Param: Parametric value for computation.
Dir: U or V direction for computation
MvarBsctSubdivTol: Subdivision tolerance for the multivariate solver.
MvarBsctNumerTol: Numeric tolerance of a possible numeric improvement stage. The numeric stage is employed if MvarBsctNumerTol < MvarBsctSubdivTol.
ShouldCheckEndPoints: o include end points also for checking.


Returned Value:

MvarPtStruct *: The computed values


Keywords:




MvarBsctPurgeAwayLLAndCCConstraints

(mvbiscon.c:370)

Prototype:

  MvarVoronoiCrvStruct *MvarBsctPurgeAwayLLAndCCConstraints(MvarVoronoiCrvStruct
                                                                     *InputCrvs)


Description:

Given the struct, this function says whether the bisector point satisfies the LL and Curvature constraints

Parameters:

InputCrvs: A VoronoiCrvStruct of monotone pieces


Returned Value:

MvarVoronoiCrvStruct *: VoronoiCrvStruct for storing the resultant


See Also:

MvarBsctApplyLL MvarBsctApplyCC

Keywords:

bisectors


MvarBsctSkel2DEqPts3Crvs

(mvtrmbis.c:566)

Prototype:

  MvarPtStruct *MvarBsctSkel2DEqPts3Crvs(CagdCrvStruct *Crv1Inp,
                                         CagdCrvStruct *Crv2Inp,
                                         CagdCrvStruct *Crv3Inp)


Description:

Formulate multivariate constraints for the points that are at equal distance from the three primitives and solve for them. Assumes that the three primitives are lines or curves and that they do NOT intersect. Modified from from skel2d.c in mvar_lib to suit our needs

Parameters:

Crv1Inp, Crv2Inp, Crv3Inp: The three input primitives to consider.


Returned Value:

MvarPtStruct *: A linked list of all equadistant points computed, or NULL if none found.


Keywords:




MvarBsctSplitCurve

(mvvorcrv.c:997)

Prototype:

  void MvarBsctSplitCurve(MvarVoronoiCrvStruct *Cv,
                          MvarPtStruct *SplitPt,
                          MvarVoronoiCrvStruct **CvLeft,
                          MvarVoronoiCrvStruct **CvRight)


Description:

A Geometric Primitive Function that splits the given curve into two - left and right curve of a given parameter t.

Parameters:

Cv: Input curve.
SplitPt: The parameter at which to split.
CvLeft, CvRight: he resultant split curves.


Returned Value:

void


Keywords:




MvarBsctSplitImplicitCrvToMonotonePieces

(mvsplmon.c:1148)

Prototype:

  void MvarBsctSplitImplicitCrvToMonotonePieces(CagdSrfStruct *Srf,
                                                CagdSrfStruct **OutLst,
                                                CagdRType MvarBsctSubdivTol,
                                                CagdRType MvarBsctNumerTol)


Description:

Splits the bivariate zero set Srf=0 (implicit form) into uv-monotone pieces. The recursive algorithm is based on the paper by Keyser et al.

Parameters:

Srf: Implicit surface definition.
OutLst: Output list of uv-monotone surfaces.
MvarBsctSubdivTol: Subdivision tolerance for multivariate solver.
MvarBsctNumerTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if MvarBsctNumerTol < MvarBsctSubdivTol.


Returned Value:

void


Keywords:




MvarBsctTrimCrvPt

(mvtrmpcr.c:1189)

Prototype:

  CagdCrvStruct *MvarBsctTrimCrvPt(CagdCrvStruct *Crv,
                                   CagdRType *Pt,
                                   CagdRType Alpha,
                                   CagdCrvStruct *BaseCrv)


Description:

This function returns the radial lower envelope if the input is a (list of) crv (s) and a point or returns the trimmed bisector if the input is a pair of crv and a point.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
Alpha: arameter of the alpha-sector - CagdRType. 0.5 for bisector.
BaseCrv: he Crv for which the trimming is sought along its discontinuity point.


Returned Value:

CagdCrvStruct *: Return the list of trimmed bisector curves.


See Also:

MvarBsctTrimCrvPtPair MvarBsctCrvPtLeft MvarBsctCrvPtCurvature SymbCrvsLowerEnvelop

Keywords:

bisectors


MvarBsctTrimCrvPtPair

(mvtrmpcr.c:801)

Prototype:

  CagdCrvStruct *MvarBsctTrimCrvPtPair(CagdCrvStruct *Crv,
                                       CagdRType *Pt,
                                       CagdRType Alpha)


Description:

Given the struct, this function says whether the bisector point satisfies the LL and Curvature constraint for a crv and a point pair and trims it to the minimum.

Parameters:

Crv: The input curve - CagdCrvStruct.
Pt: The input point - CagdRType.
Alpha: arameter of the alpha-sector - CagdRType. 0.5 for bisector.


Returned Value:

CagdCrvStruct *: Return the list of trimmed bisector curves.


See Also:

MvarBsctTrimCrvPt MvarBsctCrvPtLeft MvarBsctCrvPtCurvature

Keywords:




MvarBsctTrimCurveBetween

(mvlowenv.c:122)

Prototype:

  void MvarBsctTrimCurveBetween(MvarVoronoiCrvStruct *Cv,
                                MvarPtStruct *Pt1,
                                MvarPtStruct *Pt2,
                                MvarVoronoiCrvStruct **TrimmedCurve)


Description:

Splitting the Cv at the given points Pt1 and Pt2.

Parameters:

Cv: Given a MvarVoronoiCrvStruct Cv.
Pt1: A MvarPtStruct.
Pt2: A MvarPtStruct.
TrimmedCurve: MvarVoronoiCrvStruct of the resultant.


Returned Value:

void


See Also:

MvarBsctComputeLowerEnvelope MvarBsctMergeLowerEnvelopes MvarBsctComputeLowerEnvelopeAux MvarBsctComputeLowerEnvelopeOfOverlap

Keywords:




MvarBsctTrimSurfaceByUVBbox

(mvsplmon.c:370)

Prototype:

  CagdSrfStruct *MvarBsctTrimSurfaceByUVBbox(CagdSrfStruct *Srf,
                                             CagdBBoxStruct UVBbox)


Description:

Trims the given surface Srf using the given box dimensions. Uses CagdSrfRegionFromSrf twice.

Parameters:

Srf: Implicit surface definition.
UVBbox: Given box dimensions.


Returned Value:

CagdSrfStruct *: The trimmed surface


Keywords:




MvarBspMVDerive

(mvar_der.c:123)

Prototype:

  MvarMVStruct *MvarBspMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Given a Bspline multi-variate, computes its partial derivative multi-variate in direction Dir. Let old control polygon be P(i), i = 0 to k-1, and Q(i) be new one. Then:
Q(i) = (k - 1) * (P(i+1) - P(i)) / (Kv(i + k) - Kv(i + 1)), i = 0 to k-2.

This function computes the derivative of a rational function component- wise with out taking into consideration the quotient rule.

Parameters:

MV: Multi-Variate to differentiate.
Dir: Direction of differentiation.


Returned Value:

MvarMVStruct *: Differentiated multi-variate in direction Dir. A Bspline multi-variate.


Keywords:

multi-variates


MvarBspMVDeriveRational

(mvbspsym.c:207)

Prototype:

  MvarMVStruct *MvarBspMVDeriveRational(MvarMVStruct *MV, MvarMVDirType Dir)


Description:

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

Parameters:

MV: Rational Bspline multivariate to differentiate.
Dir: Direction of Differentiation.


Returned Value:

MvarMVStruct *: Differentiated rational Bspline multivariate.


See Also:

MvarMVDerive MvarBzrMVDerive MvarBspMVDerive MvarBzrMVDeriveRational

Keywords:

derivatives


MvarBspMVInteriorKnots

(mvar_aux.c:1765)

Prototype:

  CagdBType MvarBspMVInteriorKnots(const MvarMVStruct *MV, CagdRType *Knot)


Description:

Returns -1 if the given Bspline multivariate has not interior knots in no direction. Otherwise, return the direction that has an interior knot and returns the knot velue in Knot.

Parameters:

MV: To check for interior knots.
Knot: Where to return an interior knot if found one.


Returned Value:

CagdBType: -1 if MV has no interior knots, Axis of interior knot otherwise.


See Also:

BspCrvHasOpenEC MvarBspMVIsOpen MvarBspMVIsOpenInDir MvarBspMVIsPeriodicInDir

Keywords:

Internal knots Bezier


MvarBspMVIsOpen

(mvar_aux.c:1671)

Prototype:

  CagdBType MvarBspMVIsOpen(const MvarMVStruct *MV)


Description:

Returns TRUE iff the given Bspline multivariate has open end coditions in all direction directions.

Parameters:

MV: To check for open end conditions.


Returned Value:

CagdBType: TRUE, if MV has open end conditions in all directions, FALSE otherwise.


See Also:

BspCrvHasOpenEC MvarBspMVIsOpenInDir MvarBspMVIsOpenInDir

Keywords:

open end conditions


MvarBspMVIsOpenInDir

(mvar_aux.c:1643)

Prototype:

  CagdBType MvarBspMVIsOpenInDir(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Returns TRUE iff the given Bspline multivariate has open end coditions in the specified direction Dir.

Parameters:

MV: To check for open end conditions.
Dir: Direction to test for open end conditions.


Returned Value:

CagdBType: TRUE, if MV has open end conditions in Dir, FALSE otherwise.


See Also:

BspCrvHasOpenEC MvarBspMVIsOpen MvarBspMVIsPeriodic MvarBspMVIsPeriodicInDir

Keywords:

open end conditions


MvarBspMVIsPeriodic

(mvar_aux.c:1732)

Prototype:

  CagdBType MvarBspMVIsPeriodic(const MvarMVStruct *MV)


Description:

Returns TRUE iff the given Bspline multivariate has periodic end coditions in at least one direction.

Parameters:

MV: To check for periodic end conditions.


Returned Value:

CagdBType: TRUE, if MV has periodic end conditions in some Dir, FALSE otherwise.


See Also:

BspCrvHasOpenEC MvarBspMVIsOpen MvarBspMVIsOpenInDir MvarBspMVIsPeriodicInDir MvarBspMVInteriorKnots

Keywords:

periodic end conditions


MvarBspMVIsPeriodicInDir

(mvar_aux.c:1708)

Prototype:

  CagdBType MvarBspMVIsPeriodicInDir(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Returns TRUE iff the given Bspline multivariate has periodic end coditions in the specified direction Dir.

Parameters:

MV: To check for periodic end conditions.
Dir: Direction to test for periodic end conditions.


Returned Value:

CagdBType: TRUE, if MV has periodic end conditions in Dir, FALSE otherwise.


See Also:

BspCrvHasOpenEC MvarBspMVIsOpen MvarBspMVIsOpenInDir MvarBspMVIsPeriodic

Keywords:

periodic end conditions


MvarBspMVKnotInsertNDiff

(mvar_ref.c:87)

Prototype:

  MvarMVStruct *MvarBspMVKnotInsertNDiff(const MvarMVStruct *MV,
                                         MvarMVDirType Dir,
                                         int Replace,
                                         CagdRType *t,
                                         int n)


Description:

Given a Bspline multi-variate, inserts n knots with different values as defined by t. If, however, Replace is TRUE, the knot are simply replacing the current knot vector in the prescribed direction.

Parameters:

MV: Multi-variate to refine according to t in direction Dir.
Dir: Direction of refinement. Either U or V or W.
Replace: If TRUE t is a knot vector exactly in the length of the knot vector in direction Dir in MV and t simply replaces that knot vector. If FALSE, the knot vector in direction Dir in MV is refined by adding all the knots in t.
t: Knot vector to refine/replace the knot vector of MV in direction Dir.
n: Length of vector t.


Returned Value:

MvarMVStruct *: The refined multi-variate. A Bspline multi-variate.


Keywords:

multi-variates


MvarBspMVMult

(mvbspsym.c:63)

Prototype:

  MvarMVStruct *MvarBspMVMult(const MvarMVStruct *CMV1, const MvarMVStruct *CMV2)


Description:

Given two Bspline multivariates - multiply them coordinatewise. The two multivariates are promoted to same point type before multiplication can take place. See also BspMultComputationMethod.

Parameters:

CMV1, CMV2: The two multivariates to multiply.


Returned Value:

MvarMVStruct *: The product MV1 * MV2 coordinatewise.


Keywords:

product


MvarBspMVNew

(mvar_gen.c:171)

Prototype:

  MvarMVStruct *MvarBspMVNew(int Dim,
                             const int *Lengths,
                             const int *Orders,
                             MvarPointType PType)


Description:

Allocates the memory required for a new Bspline multi-variate.

Parameters:

Dim: Number of dimensions of this multivariate.
Lengths: Of control mesh in each of the dimensions. Vector of size Dim.
Orders: Of multi variate function in each of the dimensions.
PType: Type of control points (E2, P3, etc.).


Returned Value:

MvarMVStruct *: An uninitialized freeform multi-variate Bspline.


See Also:

MvarMVFree MvarBzrMVNew MvarMVNew MvarPwrMVNew

Keywords:

multi-variates allocation


MvarBspMVSubdivAtParam

(mvar_sub.c:229)

Prototype:

  MvarMVStruct *MvarBspMVSubdivAtParam(const MvarMVStruct *MV,
                                       CagdRType t,
                                       MvarMVDirType Dir)


Description:

Given a Bspline multi-variate, subdivides it at parameter value t in direction Dir.

Parameters:

MV: BsplineMulti-Variate to subdivide.
t: Parameter to subdivide at.
Dir: Direction of subdivision.


Returned Value:

MvarMVStruct *: A list of two multi-variates, result of the subdivision.


See Also:

MvarMVSubdivAtParam MvarBzrMVSubdivAtParam

Keywords:

multi-variates


MvarBspMultComputationMethod

(mvbspsym.c:39)

Prototype:

  int MvarBspMultComputationMethod(int BspMultUsingInter)


Description:

Sets method of Bspline product computation.

Parameters:

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


Returned Value:

int: Previous setting.


Keywords:

product


MvarBspSrfSelfInterDiagFactor

(selfintr.c:1927)

Prototype:

  MvarPtStruct *MvarBspSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
                                              CagdRType SubdivTol,
                                              CagdRType NumericTol)


Description:

Given a Bspline surface, S, compute its self intersections, if any, by dividing it at all internal knots and examining all patches against all other patches. Diagonal patches should also be examined against themselves with the aid of MvarBzrSrfSelfInterDiagFactor. Adjacent patches are sharing an edge (a curve) and hence spacial care is taken in those cases to eliminate and ignore that shared curve, in MvarAdjacentSrfSrfInter.

Parameters:

Srf: The surface to derive its self intersections.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: Tolerance of the second zero set finding numeric stage.


Returned Value:

MvarPtStruct *: List of self intersection points, as (u, v) parameter pairs into the surfaces' domain. Points in R^4.


See Also:

MvarAdjacentSrfSrfInter MvarBzrSrfSelfInterDiagFactor

Keywords:




MvarBzrLinearInOneDir

(mvar_aux.c:1804)

Prototype:

  MvarMVStruct *MvarBzrLinearInOneDir(int Dim, int Dir, MvarPointType PType)


Description:

Creates a Bezier multivariate that is constant in all directions but one.

Parameters:

Dim: DImension f the sought multivariate Bezier.
Dir: The direction that is to be linear, between 0 and Dim-1.
PType: ype of points of this new multivariate.


Returned Value:

MvarMVStruct *: The constructed multivariate.


See Also:



Keywords:




MvarBzrMVDerive

(mvar_der.c:63)

Prototype:

  MvarMVStruct *MvarBzrMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Given a Bezier multi-variate, computes its partial derivative multi-variate in direction Dir. Let old control polygon be P(i), i = 0 to k-1, and Q(i) be new one. Then:
Q(i) = (k - 1) * (P(i+1) - P(i)), i = 0 to k-2.

This function computes the derivative of a rational function component- wise with out taking into consideration the quotient rule.

Parameters:

MV: Multi-Variate to differentiate.
Dir: Direction of differentiation.


Returned Value:

MvarMVStruct *: Differentiated multi-variate in direction Dir. A Bezier multi-variate.


Keywords:

multi-variates


MvarBzrMVDeriveRational

(mvbzrsym.c:208)

Prototype:

  MvarMVStruct *MvarBzrMVDeriveRational(MvarMVStruct *MV, MvarMVDirType Dir)


Description:

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

Parameters:

MV: Rational Bezier multivariate to differentiate.
Dir: Direction of Differentiation.


Returned Value:

MvarMVStruct *: Differentiated rational Bezier multivariate.


See Also:

MvarMVDerive MvarBzrMVDerive MvarBzrMVDerive MvarBzrMVDeriveRational

Keywords:

derivatives


MvarBzrMVMult

(mvbzrsym.c:32)

Prototype:

  MvarMVStruct *MvarBzrMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

Given two Bezier multivariates - multiply them coordinatewise. The two multivariates are promoted to same point type before multiplication can take place. See also BzrMultInterpFlag.

Parameters:

MV1, MV2: The two multivariates to multiply.


Returned Value:

MvarMVStruct *: The product MV1 * MV2 coordinatewise.


Keywords:

product


MvarBzrMVNew

(mvar_gen.c:212)

Prototype:

  MvarMVStruct *MvarBzrMVNew(int Dim, const int *Lengths, MvarPointType PType)


Description:

Allocates the memory required for a new Bezier multi-variate.

Parameters:

Dim: Number of dimensions of this multivariate.
Lengths: Of control mesh in each of the dimensions. Vector of size Dim.
PType: Type of control points (E2, P3, etc.).


Returned Value:

MvarMVStruct *: An uninitialized freeform multi-variate Bezier.


See Also:

MvarMVFree MvarMVNew MvarBspMVNew MvarPwrMVNew

Keywords:

multi-variates allocation


MvarBzrMVSubdivAtParam

(mvar_sub.c:175)

Prototype:

  MvarMVStruct *MvarBzrMVSubdivAtParam(const MvarMVStruct *MV,
                                       CagdRType t,
                                       MvarMVDirType Dir)


Description:

Given a Bezier multi-variate, subdivides it at parameter value t in direction Dir.

Parameters:

MV: Bezier Multi-Variate to subdivide.
t: Parameter to subdivide at.
Dir: Direction of subdivision.


Returned Value:

MvarMVStruct *: A list of two multi-variates, result of the subdivision.


See Also:

MvarBspMVSubdivAtParam MvarMVSubdivAtParam

Keywords:

multi-variates


MvarBzrSelfInter4VarDecomp

(selfintr.c:1269)

Prototype:

  void MvarBzrSelfInter4VarDecomp(const CagdSrfStruct *Srf,
                                  MvarMVStruct **U1MinusU3Factor,
                                  MvarMVStruct **U2MinusU4Factor)


Description:

Given a 2-variate Bezier function, Srf, that is to be subtracted from itself as,
         F(u1, u2, u3, u4) = Srf(u1, u2) - Srf(u3, u4),

computes a decomposition for F as
         F(u1, u2, u3, u4) = (u1 - u3) G(u1, u2, u3, u4) +
                             (u2 - u4) H(u1, u2, u3, u4),

that is known to always exist.

Parameters:

Srf: The 2-variate to subtract against itself and decompose.
U1MinusU3Factor: he G function above.
U2MinusU4Factor: he H function above.


Returned Value:

void


See Also:



Keywords:




MvarBzrSrfSelfInterDiagFactor

(selfintr.c:1542)

Prototype:

  MvarPtStruct *MvarBzrSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
                                              CagdRType SubdivTol,
                                              CagdRType NumericTol)


Description:

Given a Bezier surface, S, compute its self intersections, if any, by computing a (u1 - u3) G(u1, u2, u3, u4) + (u2 - u4) H(u1, u2, u3, u4) decomposition for the 4-variate function of S(u1, u2)-S(u3, u4). The self intersection is then derived as the solution of:
        Gx Hy - Gy Hx = 0,
        Gx Hz - Gz Hx = 0,
        (u1 - u3) Gx + (u2 - u4) Hx = 0.

The first two equations ensure the G an H are parallel while the last guarantee a zero point in X (which is therefore a zero point in Y an Z.) Due to signularities in these equations, all six equations of the form:
        Gx Hy - Gy Hx = 0,
        Gx Hz - Gz Hx = 0,
        Gy Hz - Gz Hy = 0,
        (u1 - u3) Gx + (u2 - u4) Hx = 0,
        (u1 - u3) Gy + (u2 - u4) Hy = 0,
        (u1 - u3) Gz + (u2 - u4) Hz = 0,

are employed during the subdivision stage.

Parameters:

Srf: The surface to derive its self intersections.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: Tolerance of the second zero set finding numeric stage.


Returned Value:

MvarPtStruct *: List of self intersection points, as (u, v) parameter pairs into the surfaces' domain. Points in R^4.


See Also:

MvarBzrSelfInter4VarDecomp

Keywords:




MvarCircTanTo2Crvs

(mvtangnt.c:575)

Prototype:

  MvarPtStruct *MvarCircTanTo2Crvs(const CagdCrvStruct *Crv1,
                                   const CagdCrvStruct *Crv2,
                                   CagdRType Radius,
                                   CagdRType Tol)


Description:

Computes all circles of prescribed radius that are tangent to given two curves. Solves for circles' centers P(x, y), using the following four equations in four unknowns (x, y, r, t), and R is the desired circle radius:
      ||C1(t) - P||^2 = R^2,
      ||C2(r) - P||^2 = R^2,
      < C1(t) - P, C1'(t) > = 0,
      < C2(t) - P, C2'(t) > = 0.


Parameters:

Crv1, Crv2: he two curves to find the circles that is tangent to both.
Radius: Of all the circle(s) that is tangent to Crv1/2.
Tol: Tolerance of approximation. Subdiv Tol of MV Zeros.


Returned Value:

MvarPtStruct *: List of the 4-tuples as (r, t, x, y).


See Also:

SymbCircTanTo2Crvs

Keywords:

bi-tangent


MvarCnvrtBsp2BzrMV

(mvar_gen.c:1457)

Prototype:

  MvarMVStruct *MvarCnvrtBsp2BzrMV(const MvarMVStruct *MV)


Description:


Converts a Bspline multi-variate into a Bezier multi-variate by splitting at all interior knots.

Parameters:

MV: A Bspline multi-variate to convert to Bezier MVs.


Returned Value:

MvarMVStruct *: A list of Bezier multi-variate representing the same geometry as the given Bspline MV.


Keywords:

conversion multi-variate


MvarCnvrtBzr2BspMV

(mvar_gen.c:1418)

Prototype:

  MvarMVStruct *MvarCnvrtBzr2BspMV(const MvarMVStruct *MV)


Description:

Converts a Bezier multi-variate into a Bspline multi-variate by adding two open end uniform knot vectors to it.

Parameters:

MV: A Bezier multi-variate to convert to a Bspline MV.


Returned Value:

MvarMVStruct *: A Bspline multi-variate representing the same geometry as the given Bezier MV.


Keywords:

conversion multi-variate


MvarCnvrtBzr2PwrMV

(mvbzrpwr.c:62)

Prototype:

  MvarMVStruct *MvarCnvrtBzr2PwrMV(const MvarMVStruct *MV)


Description:

Converts the given multivariate from Bezier basis functions to a Power basis functions. Using:
        n
        __
 n      \      p-i n   p   p
B (t) = /  (-1)   ( ) ( ) t
 i      --         p   i
        p=i


or

 n0     n1         nm
B (u0) B (v1) ... B (um) =
 i0     i1         im

  n0       nm
  __       __
  \        \     p0-i0  n0   p0         pm-im  nm   pm      p0      pm
  /   ...  /  (-1)     (  ) (  ) ... (-1)     (  ) (  )   u0  ... um
  --       --           p0   i0                pm   im
 p0=i0   pm=im


This routine simply take the weight of each product of m Bezier basis functions B0(u0)... Bm(u0) and spread it into the different power basis u0^p0 ...um^pm functions scaled by:
     p0-i0 n0   p0        pm-im  nm   pm
  (-1)    (  ) (  ) ... (-1)    (  ) (  )
           p0   i0               pm   im


Parameters:

MV: To convert into Power basis function representation.


Returned Value:

MvarMVStruct *: Same geometry, but in the Power basis.


See Also:

MvarCnvrtPwr2BzrMV CagdCnvrtBzr2PwrSrf CagdCnvrtPwr2BzrSrf

Keywords:

power basis conversion


MvarCnvrtFloat2OpenMV

(mvar_aux.c:1590)

Prototype:

  MvarMVStruct *MvarCnvrtFloat2OpenMV(const MvarMVStruct *MV)


Description:


Converts a float Bspline multivariate to a Bspline multivariate with open end conditions.

Parameters:

MV: Bspline multivariate to convert to open end conditions.


Returned Value:

MvarMVStruct *: A Bspline multivariate with open end conditions, representing the same geometry as MV.


See Also:

MvarCnvrtPeriodic2FloatMV CnvrtFloat2OpenMV

Keywords:

conversion


MvarCnvrtMVPtsToCtlPts

(mvar_pll.c:431)

Prototype:

  IPObjectStruct *MvarCnvrtMVPtsToCtlPts(const MvarPtStruct *MVPts,
                                         IrtRType MergeTol)


Description:

Converts a list of multivariate points into a list of control points. Assumes all points of same dimensions.

Parameters:

MVPts: List of multivariate points to convert to list of ctlpts.
MergeTol: If non negative, attempt to merge the data into polylines.


Returned Value:

IPObjectStruct *: A list object of ctlpts.


See Also:

MvarCnvrtMVPtsToPolys

Keywords:




MvarCnvrtMVPtsToPolys

(mvar_pll.c:499)

Prototype:

  IPObjectStruct *MvarCnvrtMVPtsToPolys(const MvarPtStruct *MVPts,
                                        const MvarMVStruct *MV,
                                        IrtRType MergeTol)


Description:

Converts a list of multivariate points into a list of polylines. Assumes all points of same dimensions.

Parameters:

MVPts: List of multivariate points to convert to polylines.
MV: A multivariate to evaluate through, if not NULL.
MergeTol: Tolerance to merge points into polylines.


Returned Value:

IPObjectStruct *: A list object of polylines.


See Also:

MvarCnvrtMVPtsToCtlPts MvarCnvrtMVPtsToPolys2

Keywords:




MvarCnvrtMVPtsToPolys2

(mvar_pll.c:569)

Prototype:

  IPPolygonStruct *MvarCnvrtMVPtsToPolys2(const MvarPtStruct *InPts,
                                          CagdRType FineNess,
                                          int Dim,
                                          IrtRType *ParamDomain)


Description:

Connect a list of discrete points into a polylines.

Parameters:

InPts: A list of discrete points.
FineNess: Tolerance.
Dim: The dimension of discrete points, 1 to 3.
ParamDomain: The domain of the mvar points.


Returned Value:

IPPolygonStruct *: Connected list of polylines.


See Also:

MvarCnvrtMVPtsToCtlPts MvarCnvrtMVPtsToPolys

Keywords:




MvarCnvrtPeriodic2FloatMV

(mvar_aux.c:1515)

Prototype:

  MvarMVStruct *MvarCnvrtPeriodic2FloatMV(const MvarMVStruct *MV)


Description:

Converts a Bspline multivariate into a Bspline multivariate with floating end conditions.

Parameters:

MV: Bspline multivariate to convert to floating end conditions. Assume MV is either periodic or has floating end condition.


Returned Value:

MvarMVStruct *: A Bspline multivariate with floating end conditions, representing the same geometry as MV.


See Also:

CnvrtPeriodic2FloatMV MvarCnvrtFloat2OpenMV

Keywords:

conversion


MvarCnvrtPwr2BzrMV

(mvbzrpwr.c:163)

Prototype:

  MvarMVStruct *MvarCnvrtPwr2BzrMV(const MvarMVStruct *MV)


Description:

Converts the given multivariate from Power basis functions to Bezier basis functions. Using:

               n0       nm    i0       im
               __       __   (  ) ... (  )
   p0     pm   \        \     p0       pm    n0         nm
 u0 ... um  =  /    ... /    -------------- B (u0) ... B (um)
               --       --    n0       nm    i0         im
              i0=p0    im=pm (  ) ... (  )
                              p0       pm


This routine simply take the weight of each product of m power basis functions u0^p0 ...um^pm and spread it into the different Bezier basis B0(u0)... Bm(u0) functions scaled by:

     i0       im
    (  ) ... (  )
     p0       pm
    --------------
     n0       nm
    (  ) ... (  )
     p0       pm


Parameters:

MV: To convert into Bezier basis function representation.


Returned Value:

MvarMVStruct *: Same geometry, but in the Bezier basis.


See Also:

MvarCnvrtBzr2PwrMV CagdCnvrtBzr2PwrMV MvarCnvrtPwr2BzrMV

Keywords:

power basis conversion


MvarCoerceMVTo

(mvarcoer.c:52)

Prototype:

  MvarMVStruct *MvarCoerceMVTo(const MvarMVStruct *MV, MvarPointType PType)


Description:


Coerces a multi-variate to point type PType.

Parameters:

MV: To coerce to a new point type PType.
PType: New point type for MV.


Returned Value:

MvarMVStruct *: A new multi-variate with PType as its point type.


Keywords:

coercion


MvarCoerceMVsTo

(mvarcoer.c:25)

Prototype:

  MvarMVStruct *MvarCoerceMVsTo(const MvarMVStruct *MV, MvarPointType PType)


Description:

Coerces a list of multivariates to point type PType.

Parameters:

MV: To coerce to a new point type PType.
PType: New point type for MV.


Returned Value:

MvarMVStruct *: New multivariates with PType as their point type.


Keywords:

coercion


MvarComputeInterMidPoint

(mvtrmbis.c:371)

Prototype:

  CagdRType *MvarComputeInterMidPoint(CagdCrvStruct *Crv1,
                                      CagdRType t1,
                                      CagdCrvStruct *Crv2,
                                      CagdRType t2)


Description:

Computes the intersection point of the normals of the given two points on the given two curves. Taken from crvskel.c - need to modify to avoid artifacts in near parallel normals.

Parameters:

Crv1: First curve of the matching mid point.
t1: Parameter value of first curve's mid point.
Crv2: Second curve of the matching mid point.
t2: Parameter value of second curve's mid point.


Returned Value:

CagdRType *: Point of intersection, statically allocated.


Keywords:




MvarComputeRayTraps

(ray-trap.c:75)

Prototype:

  MvarPtStruct *MvarComputeRayTraps(const CagdCrvStruct *Crvs,
                                    int Orient,
                                    CagdRType SubdivTol,
                                    CagdRType NumerTol,
                                    CagdBType UseExprTree)


Description:

Computes solutions to locations on the given curves that would bounce rays from one curve to the next in a closed loop.

Parameters:

Crvs: List of curves to handle in order (cyclically).
Orient: Pick the proper orientation with respect to the normal if TRUE. May be faster at times.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the curves.
NumerTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: Linked list of solutions, each holding the parameter values of the different Crvs.


Keywords:




MvarComputeRayTraps3D

(raytrp3d.c:79)

Prototype:

  MvarPtStruct *MvarComputeRayTraps3D(const CagdSrfStruct *Srfs,
                                      int Orient,
                                      CagdRType SubdivTol,
                                      CagdRType NumerTol,
                                      CagdBType UseExprTree)


Description:

Computes solutions to locations on the given surfaces that would bounce rays from one surface to the next in a closed loop.

Parameters:

Srfs: List of surfaces to handle in order (cyclically).
Orient: Pick the proper orientation with respect to the normal if TRUE. May be faster at times.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumerTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: Linked list of solutions, each holding the parameter values of the different Srfs.


Keywords:




MvarComputeVoronoiCell

(mvvorcel.c:153)

Prototype:

  IPObjectStruct *MvarComputeVoronoiCell(CagdCrvStruct *Crv)


Description:

Computes the Voronoi cell of the first curve in the given list of curves. For the details of the algorithm, see the following paper. * Precise Voronoi Cell Extraction of Free-form Rational Planar Closed Curves. Iddo Hanniel, Ramanathan Muthuganapathy, Gershon Elber, Myung-Soo Kim ACM Symposium on Solid and Physical Modeling, 2005. The following are the files used for computing the Voronoi cell mvvorcel.c - Main function that call other function. It takes the input curves, process them for discontinuities and calls other functions. Displaying the output is also done in this function. mvsplmon.c - The function that creates monotone segments. mvbiscon.c - The monotone segments obtained from mvsplmon.c are then subjected to orientation and curvature constraint functions written in this file. mvtrmbis.c - Auxillary functions required for trimming are written here. mvtrmpcr.c - This file does the trimming of point/crv bisector. mvlowenv.c - Functions in this file compute the lower envelope. mvvorcrv.c - Operations on the MvarVoronoiCrvStruct are available in this file. Dependency of each of the above file is depicted in the following diagram:
                          vorcel, vorcrv
                         \               /
                          --------------
                            1  2  3  4
                       1    2       3   4
                  1      2            3     4
             1        2                 3       4
         splmon     biscon           trmpcr   lowenv
        \                                           /
         -------------------------------------------
                               |
                               |
                               |
                              \ /
                            trmbis


Parameters:

Crv: List of curves to compute the Voronoi cell.


Returned Value:

IPObjectStruct *: Returns the Voronoi cell.


Keywords:




MvarCrvAntipodalPoints

(selfintr.c:420)

Prototype:

  MvarPtStruct *MvarCrvAntipodalPoints(const CagdCrvStruct *CCrv,
                                       CagdRType SubdivTol,
                                       CagdRType NumericTol)


Description:


Computes antipodal points in the given curve - pairs of points C(t) and C(r) such that (t and r are two independent parameters of same curve):
           < C(t) - C(r), dC(t)/dt > = 0,
           < C(t) - C(r), dC(r)/dr > = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Crv satisfy these equations when t == r. The key is in adding a third inequality constaint of the form
           < C'(t), C'(r) > < 0.

Antipodal points must exists if Crv self intersect in a closed loop and hence can help in detecting self-intersections. Further, the diameter of Crv could be easily deduced from the antipodal points. Note this function also captures the self-intersection locations C(t) = C(r), for which the dot product of the tangents is negative.

Parameters:

CCrv: To detect its antipodal points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Antipodal points, as points in E2 (r, t).


See Also:

MVarCrvDiameter SymbCrvDiameter MvarSrfAntipodalPoints MvarHFDistAntipodalCrvCrvC1

Keywords:




MvarCrvCrvInter

(mvarintr.c:84)

Prototype:

  MvarPtStruct *MvarCrvCrvInter(const CagdCrvStruct *Crv1,
                                const CagdCrvStruct *Crv2,
                                CagdRType SubdivTol,
                                CagdRType NumericTol,
                                CagdBType UseExprTree)


Description:

Computes the intersection locations of two planar curves, possibly with multivariate expression trees. Expression trees could be beneficial comptationally when the geometry is complex (i.e. dozens of control points or more).

Parameters:

Crv1, Crv2: Two curves to intersect.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: List of intersection points, as parameter pairs into the two curves domains.


See Also:

CagdCrvCrvInter SymbCrvCrvInter SymbSrfSrfSrfInter MvarSrfSrfContact

Keywords:




MvarCrvCrvMinimalDist

(hasdrf2d.c:1092)

Prototype:

  MvarPtStruct *MvarCrvCrvMinimalDist(const CagdCrvStruct *Crv1,
                                      const CagdCrvStruct *Crv2,
                                      CagdRType *MinDist,
                                      CagdBType ComputeAntipodals,
                                      CagdRType Eps)


Description:

Computes the minimal distance between two given planar C1 curves. This minimal distance can occur: 1. At intersection locations, if any. 2. At end points vs. end points. 3. At the end points vs interior locations. 4. At antipodal interior locations.

Parameters:

Crv1: To detect its minimal distance to Crv2.
Crv2: To detect its minimal distance to Crv1.
MinDist: Upon return, is set to the minimal distance detected.
ComputeAntipodals: TRUE to compute antipodal locations as well in the search for minimal distance. If FALSE, samples are made along both curves and closest locations to other curve are computed.
Eps: Numeric tolerance of the computation.


Returned Value:

MvarPtStruct *: Pairs of parameters at the minimal distance.


See Also:

MvarCrvCrvAntipodalPoints SymbDistCrvPoint CagdCrvCrvInter

Keywords:




MvarCrvCrvtrByOneCtlPt

(mv_crvtr.c:230)

Prototype:

  MvarMVStruct *MvarCrvCrvtrByOneCtlPt(const CagdCrvStruct *Crv,
                                       int CtlPtIdx,
                                       CagdRType Min,
                                       CagdRType Max)


Description:

Given a parametric curve, Crv, and a control point index CtlPtIdx, compute the curvature sign field of the curve as function of the Euclidean locations of control point index CtlPtIdx. Returned is a multivariate of dimension "1 + Dim(Crv)", where Dim(Crv) is the dimension of the curve (E2, E3, etc.).

Parameters:

Crv: To compute its curvature behaviour (convex vs. concave) as a function of the curve parameter and the Euclidean coordiate of the CtlPtIdx's control point.
CtlPtIdx: Index of control point to make a parameter for the curvature.
Min, Max: Domain each coordinate of CtlPtIdx point should vary.


Returned Value:

MvarMVStruct *: The computed curvature field of Crv.


See Also:

SymbCrv2DCurvatureSign MvarCrvMakeCtlPtParam UserCrvCrvtrByOneCtlPt

Keywords:

curvature


MvarCrvMakeCtlPtParam

(mvar_rev.c:301)

Prototype:

  MvarMVStruct *MvarCrvMakeCtlPtParam(const CagdCrvStruct *Crv,
                                      int CtlPtIdx,
                                      CagdRType Min,
                                      CagdRType Max)


Description:

Given a polynomal curve and an index of a control point, CtlPtIdx, construct a new multiariate where the i'th control points is mapped to 2nd and above parameters of the returned multivariate. The first parameter of the multivariate remains the input curves' parameter. For example, if the input curve is E2 (planar), a trivariate will be returned, M(t, x, y), where t is the original curve's parameter and x and y parametrize the Euclidean values of the CtlPtIdx control point.

Parameters:

Crv: Curve to make its i'th control point a parameter.
CtlPtIdx: Index of control point to make a parameter.
Min, Max: Domain each coordinate of CtlPtIdx point should vary.


Returned Value:

MvarMVStruct *: A multivariate parametrizing both the original curve and the CtlPtIdx's control points Euclidean values.


Keywords:




MvarCrvSelfInterDiagFactor

(selfintr.c:904)

Prototype:

  MvarPtStruct *MvarCrvSelfInterDiagFactor(const CagdCrvStruct *Crv,
                                           CagdRType SubdivTol,
                                           CagdRType NumericTol)


Description:

Computes self intersection points for given curve using the following constraints r and t are two independent params of the same crv:
           x(r) - x(t) = 0,
           y(r) - y(t) = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Crv satisfy these equations when r == t. The key here is to remove all (u - v) factors off diagonal Bezier patches of the above.

Parameters:

Crv: To detect its self intersection points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Self intersection points, as points in E4 (r, t).


See Also:

MvarCrvAntipodalPoints MvarSrfSelfInterNrmlDev MvarCrvSelfInterNrmlDev

Keywords:




MvarCrvSelfInterNrmlDev

(selfintr.c:732)

Prototype:

  MvarPtStruct *MvarCrvSelfInterNrmlDev(const CagdCrvStruct *CCrv,
                                        CagdRType SubdivTol,
                                        CagdRType NumericTol,
                                        CagdRType MinNrmlDeviation)


Description:

Computes self intersection points for given curve using the following constraints r and t are two independent params of the same crv):
           x(r) - x(t) = 0,
           y(r) - y(t) = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Crv satisfy these equations when r == t. The key is in adding a third inequality constaint of the form
                < N(r), N(t) >
           ---------------------- < Cos(Angle),
           || N(r) ||  || N(t) ||

Where Cos(Angle) is a provided constant that prescribes the minimal angle the curve is expected to intersect at. The closer Cos(Angle) to one the more work this function will have to do in order to isolate the self intersection points. The above expression is not rational and so, we use a logical or of the following two expressions:
                < N(r), N(t) >^2
           -------------------------- < Cos^2(Angle),
           || N(r) ||^2 || N(t) ||^2

or
                < N(r), N(t) > < 0.


Parameters:

CCrv: To detect its self intersection points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
MinNrmlDeviation: At the intersection points. Zero for 90 degrees minimum deviation, positive for smaller minimal deviation and negative for a larger minimal deviation.


Returned Value:

MvarPtStruct *: Self intersection points, as points in E4 (r, t).


See Also:

MvarCrvAntipodalPoints MvarSrfSelfInterNrmlDev

Keywords:




MvarCrvSrfBisector

(mvbisect.c:100)

Prototype:

  MvarMVStruct *MvarCrvSrfBisector(const MvarMVStruct *CMV1,
                                   const MvarMVStruct *CMV2)


Description:


Computes the bisectors of a curve and a surface in R^4.

Parameters:

CMV1: The univariate (curve) in R^4.
CMV2: The bivariate (surface) in R^4.


Returned Value:

MvarMVStruct *: The resulting bisector.


See Also:

MvarMVsBisector MvarSrfSrfBisector MvarCrvSrfBisectorApprox

Keywords:

bisectors


MvarCrvSrfBisectorApprox

(mvbisect.c:453)

Prototype:

  VoidPtr MvarCrvSrfBisectorApprox(const MvarMVStruct *CMV1,
                                   const MvarMVStruct *CMV2,
                                   int OutputType,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol)


Description:

Computes an approximation to the bisector of a curve and a surface. Let C(t) be the parametric curve and T(t) its unnormalized tangent field. Let S(u,v) be the parametric surface and n(u, v) its unnormalized normal. Then:
      < P - C(t), T(t) > = 0    defines the normal plane of T(t),

and the solution of
      < S(u, v) + n(u, v) Alpha - C(t), T(t) > = 0

finds the intersection point of of the normal of the surface with the normal plane of the curve. Then,
                  < C(t) - S(u, v), T(t) >
 Alpha(u, v, t) = ------------------------
                      < n(u, v), T(t) >

We now can define this intersection point, P, as P(u, v, t) = S(u, v) + Alpha(u, v, t) n(u, v) and end up with a single function we must extract its zero set
 < C(t) - P(u, v, t), C(t) - P(u, v, t) > -
                   < S(u, v) - P(u, v, t), S(u, v) - P(u, v, t) > = 0

or
 < C(t) - P(u, v, t), C(t) - P(u, v, t) > -
                   < Alpha(u, v, t) n(u, v), Alpha(u, v, t) n(u, v) > = 0

Finding the zero set of the last equation provides the correspondance between the (u, v) location and the surface and (t) locations on the curve that serve as mutual foot point for some bisector point.

Parameters:

CMV1: The univariate (curve) in R^3.
CMV2: The bivariate (surface) in R^3.
OutputType: xpected output type: 1. For the computed multivariate constraints. 2. For the computed point cloud on the bisector. 3. Points in a form of (u, v, x, y, z) where (u, v) are the parameter space of the surface.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

VoidPtr: Following OutputType, either a set of multivariates (as a linked list of MvarMVStruct), or a cloud of points on the bisector (as a linked list of MvarPtStruct).


See Also:

MvarMVsBisector MvarSrfSrfBisector MvarCrvSrfBisector MvarSrfSrfBisectorApprox

Keywords:

bisectors


MvarCrvSrfMinimalDist

(hasdrf3d.c:830)

Prototype:

  MvarPtStruct *MvarCrvSrfMinimalDist(const CagdSrfStruct *Srf1,
                                      const CagdCrvStruct *Crv2,
                                      CagdRType *MinDist)


Description:

Computes the minimal distance between a given C1 curve and a C1 surface. Shapes are assumed to not intersect. This minimal distance can occur: 1. At end points vs. end points. 2. At the end points vs interior locations. 3. At a boundary curve of the surface vs the other curves. 4. At antipodal interior locations.

Parameters:

Srf1: To detect its minimal distance to Crv2.
Crv2: To detect its minimal distance to Srf1.
MinDist: Upon return, is set to the minimal distance detected.


Returned Value:

MvarPtStruct *: Pairs of parameters at the minimal distance.


See Also:

MvarSrfSrfAntipodalPoints SymbDistSrfPoint MvarSrfSrfMinimalDist

Keywords:




MvarCrvToMV

(mvareval.c:973)

Prototype:

  MvarMVStruct *MvarCrvToMV(const CagdCrvStruct *Crv)


Description:

Converts a curve into a multivariate function.

Parameters:

Crv: Curve to convert into the multi-variate MV.


Returned Value:

MvarMVStruct *: A multi variate function representation to Crv.


Keywords:

multi-variates


MvarCrvTrimGlblOffsetSelfInter

(offset2.c:105)

Prototype:

  CagdCrvStruct *MvarCrvTrimGlblOffsetSelfInter(CagdCrvStruct *Crv,
                                                const CagdCrvStruct *OffCrv,
                                                CagdRType TrimAmount,
                                                CagdRType SubdivTol,
                                                CagdRType NumericTol)


Description:

Trims regions in the offset curve OffCrv that are closer than TrimAmount to original Crv, bu compute all self intersections in the offset curve, splitting the offset curve at those intersections, and purges offset curve segments that are too close to original curve.

Parameters:

Crv: Original curve, assumed to be C1 self intersection free.
OffCrv: The offset curve approximation.
TrimAmount: The trimming distance. A fraction smaller than the offset amount.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

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


See Also:

SymbCrvTrimGlblOffsetSelfInter

Keywords:




MvarDbg

(mvar_dbg.c:27)

Prototype:

  void MvarDbg(void *Obj)


Description:

Prints multi-variates to stderr. Should be linked to programs for debugging purposes, so multi-variates may be inspected from a debugger.

Parameters:

Obj: A multi-variate - to be printed to stderr.


Returned Value:

void


Keywords:

debugging


MvarDescribeError

(mvar_err.c:93)

Prototype:

  const char *MvarDescribeError(MvarFatalErrorType ErrorNum)


Description:

Returns a string describing a the given error. Errors can be raised by any member of this mvar library as well as other users. Raised error will cause an invokation of MvarFatalError function which decides how to handle this error. MvarFatalError 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


MvarDistPointCrvC1

(hasdrf2d.c:56)

Prototype:

  CagdRType MvarDistPointCrvC1(CagdPType P,
                               const CagdCrvStruct *Crv,
                               MvarHFDistParamStruct *Param,
                               CagdBType MinDist,
                               CagdRType Epsilon)


Description:

Computes the min or max distance between a point and a C^1 cont. curve. The curve and point are assumed to be either in R2 or R3. The extreme distance between a point and a curve could happen either at the end points of curve C or when
  C'(t)  = 0.


Parameters:

P: Point to measure its Hausdorff distance to curve Crv.
Crv: Crv to measure its hausdorff distance to point Pt.
Param: Where to return the parameter value with the maximal distance.
MinDist: TRUE for minimal distance, FALSE for maximal.
Epsilon: Tolerance of computation.


Returned Value:

CagdRType: The Hausdorff distance.


See Also:

SymbDistCrvPoint

Keywords:




MvarDistSrfLine

(mvardist.c:212)

Prototype:

  CagdRType *MvarDistSrfLine(const CagdSrfStruct *Srf,
                             const CagdPType LnPt,
                             const CagdVType LnDir,
                             CagdBType MinDist,
                             CagdRType SubdivTol,
                             CagdRType NumericTol)


Description:


Given a surface and a line, finds the nearest point (if MinDist) or the farthest location (if MinDist FALSE) from the surface to the given line. This function assumes the surface does not intersect the line. Returned is the parameter value of the surface. Only internal extrema are considered. Let S and N be the surface and its normal field. Then the extrema points are computed as the simultaneous solution of,
  < (S - LnPt) x N, LnDir > = 0,
  < N, LnDir > = 0.


Parameters:

Srf: The surface to find its nearest (farthest) point to Line.
LnPt: A point on the line to consider.
LnDir: The direction of the line to consider.
MinDist: If TRUE nearest points is needed, if FALSE farthest.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

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


See Also:

MvarLclDistSrfLine MvarLclDistCrvLine MvarDistCrvLine

Keywords:

surface line distance


MvarDistSrfPoint

(mvardist.c:41)

Prototype:

  CagdRType *MvarDistSrfPoint(const CagdSrfStruct *Srf,
                              const CagdPType Pt,
                              CagdBType MinDist,
                              CagdRType SubdivTol,
                              CagdRType NumericTol)


Description:


Given a surface and a point, finds the nearest point (if MinDist) or the farthest location (if MinDist FALSE) from the surface to the given point. Returned is the parameter value of the surface. Both internal as well as boundary extrema are considered. Computes the simultaneous zeros of:
      (Srf(u, v) - Pt) . dSrf(u, v)/Du = 0,
      (Srf(u, v) - Pt) . dSrf(u, v)/Dv = 0,

and also include all extrema on the boundaries.

Parameters:

Srf: The surface to find its nearest (farthest) point to Pt.
Pt: The point to find the nearest (farthest) point on Srf to it.
MinDist: If TRUE nearest points is needed, if FALSE farthest.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

CagdRType *: UV Parameter values in the parameter space of Srf of the nearest (farthest) point to point Pt.


Keywords:

surface point distance


MvarETDbg

(mvar_dbg.c:67)

Prototype:

  void MvarETDbg(MvarExprTreeStruct *ET)


Description:

Prints multivariate expression tree to stderr. Should be linked to programs for debugging purposes, so multi-variates may be inspected from a debugger.

Parameters:

ET: A multivariate exression tree - to be printed to stderr.


Returned Value:

void


Keywords:

debugging


MvarEditSingleMVPt

(mvaredit.c:34)

Prototype:

  MvarMVStruct *MvarEditSingleMVPt(MvarMVStruct *MV,
                                   CagdCtlPtStruct *CtlPt,
                                   int *Indices,
                                   CagdBType Write)


Description:

Provides the way to modify/get a single control point into/from a multi-variate.

Parameters:

MV: Multi-variate to be modified/query.
CtlPt: New control point to be substituted into MV. Must carry the same PType as MV if to be written to MV.
Indices: In multi-variate MV's control mesh to substitute/query CtlPt.
Write: If TRUE CtlPt is copied into MV, if FALSE the point is copied from MV to CtlPt.


Returned Value:

MvarMVStruct *: If Write is TRUE, the new modified multi-variate, if WRITE is FALSE, NULL.


Keywords:

multi-variate editing


MvarEqnsZeroNumeric

(mvarzreq.c:1249)

Prototype:

  MvarPtStruct *MvarEqnsZeroNumeric(MvarPtStruct *ZeroSet,
                                    const MvarExprTreeEqnsStruct *Eqns,
                                    MvarMVStruct * const *MVs,
                                    int NumMVs,
                                    CagdRType NumericTol)


Description:

Apply a numerical improvement stage, as a first order minimization procedure of gradient computation and marching, in place.

Parameters:

ZeroSet: Set of approximated solution, derived from a subdivision process, to improve in place.
Eqns: The constraints are given as Equations, if not NULL.
MVs: Alternatively, the constraints are given as MVS.
NumMVs: If MVs is not NULL, this specifies size of the MVs vector.
NumericTol: Tolerance of the numerical process. Tolerance is measured in the deviation of the scalar multivariates from their equality. Inequalities are ignored here. If NumericTol is negative, points that fail to improve numerically are purged away.


Returned Value:

MvarPtStruct *: List of points on the solution set. Dimension of the points will be the same as the dimensions of all MVs. Points that failed to improve are purged away.


See Also:

MvarMVsZeros MvarExprTreesZeros MvarExprTreeEqnsZeros

Keywords:




MvarExprAuxDomainReset

(mvarextr.c:1133)

Prototype:

  void MvarExprAuxDomainReset(MvarExprTreeStruct *ET)


Description:

Reset aux. domains of all bezier multivariates in the expression tree.

Parameters:

ET: Expression tree to reset all aux domain of Bezier MVs.


Returned Value:

void


See Also:



Keywords:




MvarExprTreeAdd

(mvarextr.c:667)

Prototype:

  MvarExprTreeStruct *MvarExprTreeAdd(MvarExprTreeStruct *Left,
                                      MvarExprTreeStruct *Right)


Description:

Adds two sub expression tree into one new expression tree.

Parameters:

Left, Right: The two expression trees to add. These sub trees are used in place, so duplicate before calling this function if you like to keep the original Left/Right.


Returned Value:

MvarExprTreeStruct *: Added expression tree, "Left + Right".


See Also:



Keywords:




MvarExprTreeBBox

(mvarextr.c:992)

Prototype:

  const MvarBBoxStruct *MvarExprTreeBBox(MvarExprTreeStruct *ET)


Description:

Computes the BBox of the given expression tree.

Parameters:

ET: Expression Tree to compute the bounding box for.


Returned Value:

const MvarBBoxStruct *: Computed bounding box, in static memory.


See Also:



Keywords:




MvarExprTreeCnvrtBsp2BzrMV

(mvarextr.c:1259)

Prototype:

  int MvarExprTreeCnvrtBsp2BzrMV(MvarExprTreeStruct *ET,
                                 MvarMinMaxType *Domain)


Description:

Convert, in place, all Bspline MVs in expression tree ET to Beziers. All MVs are assumed to hold no interior knots. All created Bezier MVs are updated with their aux domain.

Parameters:

ET: Expression tree to convert Bspline MVs to Beziers, in place.
Domain: Optional domain to set the bezier ET as aux. domain. NULL for no setting of the aux. domain.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:



Keywords:




MvarExprTreeCnvrtBzr2BspMV

(mvarextr.c:1321)

Prototype:

  int MvarExprTreeCnvrtBzr2BspMV(MvarExprTreeStruct *ET)


Description:

Convert, in place, all Bezier MVs in expression tree ET to Bspline.

Parameters:

ET: Expression tree to convert Bspline MVs to Beziers, in place.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:



Keywords:




MvarExprTreeCopy

(mvarextr.c:364)

Prototype:

  MvarExprTreeStruct *MvarExprTreeCopy(const MvarExprTreeStruct *ET,
                                       CagdBType ThisNodeOnly,
                                       CagdBType DuplicateMVs)


Description:

A copy function to duplicate a node (ThisNodeOnly TRUE) or entire expression tree.

Parameters:

ET: Expression tree to duplicate.
ThisNodeOnly: TRUE to duplicate just this node.
DuplicateMVs: If TRUE, Multivariates in leaf nodes are duplicated. Otherwise, references for them are kept instead.


Returned Value:

MvarExprTreeStruct *: Duplicated node or tree.


See Also:



Keywords:




MvarExprTreeCrossProd

(mvarextr.c:804)

Prototype:

  MvarExprTreeStruct *MvarExprTreeCrossProd(MvarExprTreeStruct *Left,
                                            MvarExprTreeStruct *Right)


Description:

Cross Prod two sub expression tree into one new expression tree.

Parameters:

Left, Right: The two expression trees to multiply. These sub trees are used in place, so duplicate before calling this function if you like to keep the original Left/Right.


Returned Value:

MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".


See Also:



Keywords:




MvarExprTreeDomain

(mvarextr.c:1086)

Prototype:

  int MvarExprTreeDomain(const MvarExprTreeStruct *ET,
                         CagdRType *Min,
                         CagdRType *Max,
                         int Axis)


Description:

Computes the domain of the expression tree along direction Axis. The assumption is that any MV in ET with a non trivial degree in direction Axis possess the same domain.

Parameters:

ET: Expression tree to derive the domain of, in direction Axis.
Min, Max: Domain of ET in direction Axis.
Axis: The direction along with to compute the domain of ET.


Returned Value:

int: TRUE for successful computation, FALSE otherwise.


See Also:



Keywords:




MvarExprTreeDotProd

(mvarextr.c:769)

Prototype:

  MvarExprTreeStruct *MvarExprTreeDotProd(MvarExprTreeStruct *Left,
                                          MvarExprTreeStruct *Right)


Description:

Dot Prod two sub expression tree into one new expression tree.

Parameters:

Left, Right: The two expression trees to multiply. These sub trees are used in place, so duplicate before calling this function if you like to keep the original Left/Right.


Returned Value:

MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".


See Also:



Keywords:




MvarExprTreeEqnsBuild

(mvarzreq.c:503)

Prototype:

  MvarExprTreeEqnsStruct *MvarExprTreeEqnsBuild(MvarExprTreeStruct **MVETs,
                                                const MvarConstraintType
                                                             *ConstraintTypes,
                                                int NumOfMVETs)


Description:

Copy the given expression trees and process and fetch common expressions out to a separated common expressions' vector, all within the returned expression tree equations structure.

Parameters:

MVETs: Input mvar expression tree equations.
ConstraintTypes: Type of MVETs constraints. Same length as MVETs vec.
NumOfMVETs: umber of input mvar expression tree equations, in MVETs.


Returned Value:

MvarExprTreeEqnsStruct *: Build set of equations with common exprs.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeEqnsBuild2

(mvarzreq.c:716)

Prototype:

  MvarExprTreeEqnsStruct *MvarExprTreeEqnsBuild2(MvarMVStruct * const *MVs,
                                                 const MvarConstraintType
                                                             *ConstraintTypes,
                                                 int NumOfMVs)


Description:

Copy the given expression trees and process and fetch common expressions out to a separated common expressions' vector, all within the returned expression tree equations structure.

Parameters:

MVs: Input mvar expression tree equations.
ConstraintTypes: Type of MVETs constraints. Same length as MVETs vec.
NumOfMVs: Number of input mvar expression tree equations, in MVETs.


Returned Value:

MvarExprTreeEqnsStruct *: Build set of equations with common exprs.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeEqnsFree

(mvarzreq.c:195)

Prototype:

  void MvarExprTreeEqnsFree(MvarExprTreeEqnsStruct *Eqns)


Description:

Free all data allocated in the expression tree equation's structure.

Parameters:

Eqns: Data structure to free.


Returned Value:

void


See Also:

MvarMVsZeros MvarExprTreeEqnsMalloc

Keywords:




MvarExprTreeEqnsMalloc

(mvarzreq.c:151)

Prototype:

  MvarExprTreeEqnsStruct *MvarExprTreeEqnsMalloc(int NumEqns,
                                                 int MaxNumCommonExprs)


Description:

Allocate a structure to hold NumEqns equations and at most MaxNumCommonExprs common expressions.

Parameters:

NumEqns: Number of equations we have.
MaxNumCommonExprs: Maximum number of common expression we can initially hold.


Returned Value:

MvarExprTreeEqnsStruct *: Allocated structure.


See Also:

MvarMVsZeros MvarExprTreeEqnsFree

Keywords:




MvarExprTreeEqnsMidPt

(mvarzreq.c:1563)

Prototype:

  MvarPtStruct *MvarExprTreeEqnsMidPt(MvarExprTreeStruct * const *MVETs,
                                      int NumOfMVETs,
                                      int SingleSol)


Description:

Construct a point of the dimension as the given MVET in the middle of its parametric domain.

Parameters:

MVETs: To consurct a point in the middle of their domain.
NumOfMVETs: ize of MVETs vector.
SingleSol: If TRUE, this point is a single solution in MV domain.


Returned Value:

MvarPtStruct *: The construct point in the middle of the MV.


See Also:

MvarExprTreeEqnsZero

Keywords:




MvarExprTreeEqnsReallocCommonExprs

(mvarzreq.c:236)

Prototype:

  void MvarExprTreeEqnsReallocCommonExprs(MvarExprTreeEqnsStruct *Eqns,
                                          int NewSize)


Description:

Reallocate (increase) the number of common expressions give Eqns can hold, in place.

Parameters:

Eqns: Set of equations to increase, in place, the number of coomon expressions it can old.
NewSize: of vector of common expression, zero to double the size.


Returned Value:

void


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeEqnsSubdivAtParam

(mvarzreq.c:320)

Prototype:

  int MvarExprTreeEqnsSubdivAtParam(const MvarExprTreeEqnsStruct *Eqns,
                                    CagdRType t,
                                    MvarMVDirType Dir,
                                    MvarExprTreeEqnsStruct **Eqns1,
                                    MvarExprTreeEqnsStruct **Eqns2)


Description:

Given a set of equations over some domain, divided them all in Dir at t.

Parameters:

Eqns: The equations to subdivide.
t: Parameter to subdivide at.
Dir: Direction of subdivision.
Eqns1: First set of divided equations.
Eqns2: Second set of divided equations.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeEqnsUpdateCommonExprIdcs

(mvarzreq.c:272)

Prototype:

  void MvarExprTreeEqnsUpdateCommonExprIdcs(MvarExprTreeStruct *ET,
                                            MvarExprTreeStruct **CommonExprs,
                                            int NumOfCommonExpr)


Description:

Traverse an expression tree and update every common expression index to a real reference to a (common) expression tree.

Parameters:

ET: Expression tree to traverse and update common expresssions.
CommonExprs: Vector of common expressions to reference from MVET.
NumOfCommonExpr: Size of CommonExprs vector.


Returned Value:

void


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeEqnsZeroFilterIdenticalSet

(mvarzreq.c:1617)

Prototype:

  MvarPtStruct *MvarExprTreeEqnsZeroFilterIdenticalSet(
                                             MvarPtStruct *ZeroSet,
                                             const MvarExprTreeEqnsStruct *Eqns,
                                             CagdRType Tol)


Description:

Filters out identical points or points that fail the inequality constraints.

Parameters:

ZeroSet: The solution points to filter out.
Eqns: Multivariate ET constraints.
Tol: Tolerance to consider to points same in L^1 norm.


Returned Value:

MvarPtStruct *: Filtered solution points.


See Also:

MvarExprTreesZeros MvarExprTreeEqnsZeros

Keywords:




MvarExprTreeEqnsZeros

(mvarzreq.c:890)

Prototype:

  MvarPtStruct *MvarExprTreeEqnsZeros(MvarExprTreeEqnsStruct *Eqns,
                                      CagdRType SubdivTol,
                                      CagdRType NumericTol)


Description:

Computes the simultaneous solution of the given set of NumOfMVETs expression tree constraints. A constraints can be equality or ineqaulity as prescribed by the Constraints vector. All multivariates are assumed to be scalar and be in the same parametric domain size and dimension. This procedure performs a preliminary subdivision until the geometry is found simple enough (I.e. no internal knots or small enough), when it invokes MvarMVsZeros.

Parameters:

Eqns: All the equations as expression tree constraints.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if IRIT_FABS(NumericTol) < SubdivTol. If NumericTol is negative, points that fail to improve numerically are purged away.


Returned Value:

MvarPtStruct *: List of points on the solution set. Dimension of the points will be the same as the dimensions of all MVs.


See Also:

MvarMVsZeros MvarExprTreeZerosSetCallBackFunc MvarExprTreeZerosCnvrtBezier2MVs MvarExprTreeZerosUseCommonExpr

Keywords:




MvarExprTreeEval

(mvarextr.c:1457)

Prototype:

  CagdRType *MvarExprTreeEval(const MvarExprTreeStruct *ET,
                              CagdRType *Params)


Description:

Evaluate the expression tree at the given parametric location.

Parameters:

ET: Expression tree to evaluate.
Params: Parameter values to evaluate the expression at.


Returned Value:

CagdRType *: Evaluation result. Note entry zero is reserved to the rational (weight) value.


See Also:

MvarExprTreeGrad

Keywords:




MvarExprTreeEvalTanPlane

(mvarextr.c:1713)

Prototype:

  MvarPlaneStruct *MvarExprTreeEvalTanPlane(const MvarExprTreeStruct *ET,
                                            CagdRType *Params)


Description:

aluates the tangent hyperplane of the given ET at a given location, numerically.

Parameters:

ET: To evaluate its gradient at given Params parametric location.
Params: Parametric location to evaluate MV at.


Returned Value:

MvarPlaneStruct *: A hyperplane, allocated dynammically. The tanegnt is normalized so that its last (independent coefficient is one: "A1 X1 + A2 X2 + ... + An Xn + 1". The size, n, is to the dimension of the multivariate.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeFree

(mvarextr.c:503)

Prototype:

  void MvarExprTreeFree(MvarExprTreeStruct *ET, CagdBType ThisNodeOnly)


Description:

Free an expression tree node (ThisNodeOnly TRUE) or its entire tree.

Parameters:

ET: Expression tree to free.
ThisNodeOnly: TRUE to free just this node, FALSE for the entire tree.


Returned Value:

void


See Also:

MvarExprTreeFreeSlots

Keywords:




MvarExprTreeFreeSlots

(mvarextr.c:443)

Prototype:

  void MvarExprTreeFreeSlots(MvarExprTreeStruct *ET, CagdBType ThisNodeOnly)


Description:

Free an expression tree node (ThisNodeOnly TRUE) or its entire tree.

Parameters:

ET: Expression tree to free.
ThisNodeOnly: TRUE to free just this node, FALSE for the entire tree.


Returned Value:

void


See Also:

MvarExprTreeFree

Keywords:




MvarExprTreeFromCrv

(mvarextr.c:36)

Prototype:

  MvarExprTreeStruct *MvarExprTreeFromCrv(const CagdCrvStruct *Crv,
                                          int NewDim,
                                          int StartAxis)


Description:

Converts the input curve into a multivariate expression tree in newDim dimension so that the Crv is along the StartAxis dimension.

Parameters:

Crv: TO convert into an expression tree of NewDim dimension.
NewDim: The new multivariate dimension of this tree, to promote the curve from.
StartAxis: he starting axis (dimension) of the directions of Crv.


Returned Value:

MvarExprTreeStruct *: The build multivariate expression tree.


See Also:



Keywords:




MvarExprTreeFromMV

(mvarextr.c:101)

Prototype:

  MvarExprTreeStruct *MvarExprTreeFromMV(const MvarMVStruct *MV,
                                         int NewDim,
                                         int StartAxis)


Description:

Converts the input multivairate into a multivariate expression tree in newDim dimension so that the MV is along the StartAxis dimension (and beyond).

Parameters:

MV: To convert into an expression tree of NewDim dimension.
NewDim: The new multivariate dimension of this tree, to promote the surface from.
StartAxis: he starting axis (dimension) of the directions of MV.


Returned Value:

MvarExprTreeStruct *: The build multivariate expression tree.


See Also:

MvarExprTreeFromMV2

Keywords:




MvarExprTreeFromMV2

(mvarextr.c:131)

Prototype:

  MvarExprTreeStruct *MvarExprTreeFromMV2(const MvarMVStruct *MV)


Description:

Converts the input multivairate into a multivariate expression tree in newDim dimension so that the MV is along the StartAxis dimension (and beyond).

Parameters:

MV: To convert into an expression tree of NewDim dimension.


Returned Value:

MvarExprTreeStruct *: The build multivariate expression tree.


See Also:

MvarExprTreeFromMV

Keywords:




MvarExprTreeFromSrf

(mvarextr.c:68)

Prototype:

  MvarExprTreeStruct *MvarExprTreeFromSrf(const CagdSrfStruct *Srf,
                                          int NewDim,
                                          int StartAxis)


Description:

Converts the input surface into a multivariate expression tree in newDim dimension so that the Srf is along the StartAxis dimension (and beyond).

Parameters:

Srf: TO convert into an expression tree of NewDim dimension.
NewDim: The new multivariate dimension of this tree, to promote the surface from.
StartAxis: he starting axis (dimension) of the directions of Srf.


Returned Value:

MvarExprTreeStruct *: The build multivariate expression tree.


See Also:



Keywords:




MvarExprTreeGradient

(mvarextr.c:1563)

Prototype:

  CagdRType *MvarExprTreeGradient(const MvarExprTreeStruct *ET,
                                  CagdRType *Params,
                                  int *Dim)


Description:

Evaluate the gradient of the expression tree at the given parametric location.

Parameters:

ET: Expression tree to evaluate its gradient.
Params: Parameter values to evaluate the gradient of the expression.
Dim: Will be set with the dimension of the gradient.


Returned Value:

CagdRType *: Evaluation result. If the returned gradient vector is of dimension n, it will be saved in entries [0] to [n-1].


See Also:

MvarExprTreeEval

Keywords:




MvarExprTreeInteriorKnots

(mvarextr.c:1371)

Prototype:

  int MvarExprTreeInteriorKnots(const MvarExprTreeStruct *ET, CagdRType *Knot)


Description:

Tests if all MVs in expression tree ET are Bezier (no interior knots).

Parameters:

ET: Expression tree to examine for interior knots.
Knot: Interior knot value if non Bezier expression tree (valid only if a non negative value is returned).


Returned Value:

int: Negative if all MVs are Bezier, index to dimension with interior knots, from which Knot is extracted.


See Also:



Keywords:




MvarExprTreeIntrnlNew

(mvarextr.c:311)

Prototype:

  MvarExprTreeStruct *MvarExprTreeIntrnlNew(MvarExprTreeNodeType NodeType,
                                            MvarExprTreeStruct *Left,
                                            MvarExprTreeStruct *Right,
                                            const MvarBBoxStruct *MVBBox)


Description:

An expression tree (ET) constructor for a tree internal node.

Parameters:

NodeType: Type of internal node, addition, multiplication, etc.
Left, Right: The left and right sons of this node.
MVBBox: Bounding box, if any, of this node.


Returned Value:

MvarExprTreeStruct *: The expression tree consturcted represention.


See Also:



Keywords:




MvarExprTreeLeafNew

(mvarextr.c:251)

Prototype:

  MvarExprTreeStruct *MvarExprTreeLeafNew(CagdBType IsRef,
                                          MvarMVStruct *MV,
                                          int NewDim,
                                          int StartAxis,
                                          MvarNormalConeStruct *MVBCone,
                                          const MvarBBoxStruct *MVBBox)


Description:

An expression tree (ET) constructor for a tree leaf node.

Parameters:

IsRef: TRUE to just reference MV instead of copying it. Note that if NewDim is non zero, the MV will always be copied with the new expanded dimension NewDim.
MV: MV to occupy this leaf node. Can be NULL.
NewDim: The new multivariate dimension of this tree.
StartAxis: he starting axis of the directions of MV.
MVBCone: Bounding code, if any, of MV.
MVBBox: Bounding box, if any, of MV.


Returned Value:

MvarExprTreeStruct *: An expression tree representing MV.


See Also:



Keywords:




MvarExprTreeMult

(mvarextr.c:735)

Prototype:

  MvarExprTreeStruct *MvarExprTreeMult(MvarExprTreeStruct *Left,
                                       MvarExprTreeStruct *Right)


Description:

Multiplies two sub expression tree into one new expression tree.

Parameters:

Left, Right: The two expression trees to multiply. These sub trees are used in place, so duplicate before calling this function if you like to keep the original Left/Right.


Returned Value:

MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".


See Also:



Keywords:




MvarExprTreePrintInfo

(mvarextr.c:1177)

Prototype:

  void MvarExprTreePrintInfo(MvarExprTreeStruct *ET,
                             CagdBType CommonExprIdx,
                             MvarExprTreePrintFuncType PrintFunc)


Description:

Traverses the ET in infix order and print the Info/Node in the ET.

Parameters:

ET: To traverse and prints its Info/Node content.
CommonExprIdx: TRUE to only dump the common expression index, FALSE for the full common expression in place.
PrintFunc: Call back function to print a string.


Returned Value:

void


See Also:



Keywords:




MvarExprTreeRemoveFromVector

(mvarzreq.c:449)

Prototype:

  int MvarExprTreeRemoveFromVector(MvarExprTreeStruct **Vec, int Idx)


Description:

Removes all references in vector from position i to all the subtree.

Parameters:

Vec: Vector to remove all reference (make NULL) from the i'th pos.
Idx: Position in vector where to remove the references from.


Returned Value:

int: Index of next item in vector, after all removed items.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeSize

(mvarextr.c:529)

Prototype:

  int MvarExprTreeSize(MvarExprTreeStruct *ET)


Description:

Returns the size (number of nodes) an expression tree has.

Parameters:

ET: Expression tree to compute its size (number of nodes).


Returned Value:

int: Number of nodes in ET.


See Also:



Keywords:




MvarExprTreeSub

(mvarextr.c:701)

Prototype:

  MvarExprTreeStruct *MvarExprTreeSub(MvarExprTreeStruct *Left,
                                      MvarExprTreeStruct *Right)


Description:

Subtracts two sub expression tree into one new expression tree.

Parameters:

Left, Right: The two expression trees to subtract. These sub trees are used in place, so duplicate before calling this function if you like to keep the original Left/Right.


Returned Value:

MvarExprTreeStruct *: Subtracted expression tree, "Left - Right".


See Also:



Keywords:




MvarExprTreeSubdivAtParam

(mvarextr.c:844)

Prototype:

  int MvarExprTreeSubdivAtParam(const MvarExprTreeStruct *ET,
                                CagdRType t,
                                MvarMVDirType Dir,
                                MvarExprTreeStruct **Left,
                                MvarExprTreeStruct **Right)


Description:

Subdivides the given multivariate expression tree at t in direction Dir.

Parameters:

ET: The expression tree to subdivide at parameter value t, in Dir.
t: The parameter value to subdivide at.
Dir: The direction of subdivision.
Left: First result of subdivision.
Right: Second result of subdivision.


Returned Value:

int: TRUE if succesful, FALSE otherwise.


See Also:



Keywords:




MvarExprTreeToMV

(mvarextr.c:153)

Prototype:

  MvarMVStruct *MvarExprTreeToMV(const MvarExprTreeStruct *ET)


Description:

Converts an expression tree to a regular multivariate function.

Parameters:

ET: Expression tree to convert to a multivariate.


Returned Value:

MvarMVStruct *: Multiviarate representing the expression tree.


See Also:



Keywords:




MvarExprTreeToVector

(mvarzreq.c:406)

Prototype:

  int MvarExprTreeToVector(MvarExprTreeStruct *ET,
                           MvarExprTreeStruct **Vec,
                           int Idx)


Description:

Place all nodes (top down) in one linear vector.

Parameters:

ET: Expression tree to place all its node on Vec.
Vec: Where to place all nodes of ET, top down.
Idx: Index into vec where to place the next node.


Returned Value:

int: Last index of a placed node in vec.


See Also:

MvarMVsZeros

Keywords:




MvarExprTreeZerosCnvrtBezier2MVs

(mvarzreq.c:93)

Prototype:

  int MvarExprTreeZerosCnvrtBezier2MVs(int Bezier2MVs)


Description:

Sets the way expression trees of Bezier MVs are treated. If TRUE, the ET are converted into MVS and the regular MV zero solver is invoked. If FALSE, the ET is subdivided all the way to SUbdivTol. subdivisions' zero set solver.

Parameters:

Bezier2MVs: TRUE to convert to MVs, FALSE to subdivide Bezier ETs.


Returned Value:

int: Old setting for bezier conversion setting.


See Also:

MvarExprTreesZeros MvarExprTreeZerosUseCommonExpr

Keywords:




MvarExprTreeZerosSetCallBackFunc

(mvarzreq.c:121)

Prototype:

  MvarMVsZerosSubdivCallBackFunc MvarExprTreeZerosSetCallBackFunc(
                             MvarMVsZerosSubdivCallBackFunc SubdivCallBackFunc)


Description:

Sets the call back function to invoke just before the expression tree recursion invokes the regular zeros solver (MvarMVsZeros) with the converted to multivariates.

Parameters:

SubdivCallBackFunc: New call back function, NULL to disable call back.


Returned Value:

MvarMVsZerosSubdivCallBackFunc: Old call back function.


See Also:

MvarExprTreesZeros

Keywords:




MvarExprTreeZerosUseCommonExpr

(mvarzreq.c:65)

Prototype:

  int MvarExprTreeZerosUseCommonExpr(int UseCommonExpr)


Description:

Sets the exploitation of common expression extraction in expression trees. If TRUE, the ETs are scanned for common expressions that are then processed once only, during the subdivision process.

Parameters:

UseCommonExpr: TRUE to use common expressions, FALSE otherwise.


Returned Value:

int: Old setting of common expressions' use.


See Also:

MvarExprTreesZeros MvarExprTreeZerosCnvrtBezier2MVs

Keywords:




MvarExprTreesSame

(mvarextr.c:575)

Prototype:

  CagdBType MvarExprTreesSame(const MvarExprTreeStruct *ET1,
                              const MvarExprTreeStruct *ET2,
                              CagdRType Eps)


Description:

A comparison funcion to test for similarity (upto Eps) two expression trees.

Parameters:

ET1, ET2: Twu expression trees to compare.
Eps: Tolerance of approximation.


Returned Value:

CagdBType: TRUE if the same ETs (upto Eps), FALSE otherwise.


See Also:



Keywords:




MvarExprTreesVerifyDomain

(mvarextr.c:626)

Prototype:

  int MvarExprTreesVerifyDomain(MvarExprTreeStruct *ET1,
                                MvarExprTreeStruct *ET2)


Description:

Examine the given two multivariate's expression trees if they share the same domains.

Parameters:

ET1, ET2: Two multivariate expression trees to verify that they share the same domains.


Returned Value:

int: TRUE if Et1/2 shares the same domains, FALSE otherwise.


See Also:

MvarExprTreeDomain

Keywords:




MvarExprTreesZeros

(mvarzreq.c:842)

Prototype:

  MvarPtStruct *MvarExprTreesZeros(MvarExprTreeStruct **MVETs,
                                   MvarConstraintType *Constraints,
                                   int NumOfMVETs,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol)


Description:

Computes the simultaneous solution of the given set of NumOfMVETs expression tree constraints. A constraints can be equality or ineqaulity as prescribed by the Constraints vector. All multivariates are assumed to be scalar and be in the same parametric domain size and dimension. This procedure performs a preliminary subdivision until the geometry is found simple enough (I.e. no internal knots or small enough), when it invokes MvarMVsZeros.

Parameters:

MVETs: Vector of multivariate expression tree constraints.
Constraints: Either an equality or an inequality type of constraint.
NumOfMVETs: Size of the MVs expresion trees and Constraints vectors.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if IRIT_FABS(NumericTol) < SubdivTol. If NumericTol is negative, points that fail to improve numerically are purged away.


Returned Value:

MvarPtStruct *: List of points on the solution set. Dimension of the points will be the same as the dimensions of all MVs.


See Also:

MvarMVsZeros MvarExprTreeZerosSetCallBackFunc MvarExprTreeZerosCnvrtBezier2MVs MvarExprTreeZerosUseCommonExpr

Keywords:




MvarFatalError

(mvar_ftl.c:53)

Prototype:

  void MvarFatalError(MvarFatalErrorType ErrID)


Description:

Trap Mvar_lib errors right here. Provides a default error handler for the mvar library. Gets an error description using MvarDescribeError, prints it and exit the program using exit.

Parameters:

ErrID: Error type that was raised.


Returned Value:

void


Keywords:

error handling


MvarGetLastPt

(mvar_pll.c:236)

Prototype:

  MvarPtStruct *MvarGetLastPt(MvarPtStruct *Pts)


Description:

Returns the last element in the list.

Parameters:

Pts: List of points to fetch last one.


Returned Value:

MvarPtStruct *: Last element in list.


Keywords:




MvarGetMiniumIntnPar

(mvtrmpcr.c:1548)

Prototype:

  static CagdPtStruct *MvarGetMiniumIntnPar(CagdCrvStruct *TrimmedBis,
                                            CagdRType *Pt,
                                            CagdPtStruct *Inter,
                                            CagdPType LeftNormal)


Description:

This function returns the minimum intersection parameter of the curve with the Line after confirming that the vector between the discontinuity point and the intersection parameter is in the same direction to the Left hand normal.

Parameters:

TrimmedBis: The input curve in CagdCrvStruct.
Pt: The input point - CagdRType.
Inter: List of intersection parameters obtained using SymbLclDistCrvLine.
LeftNormal: Left Normal of TrimmedBis at the point Pt.


Returned Value:

CagdPtStruct *: Return the TrimmedBis parameter.


See Also:

SymbLclDistCrvLine

Keywords:




MvarGetPointsMeshIndices

(mvar_aux.c:1197)

Prototype:

  int MvarGetPointsMeshIndices(const MvarMVStruct *MV, int *Indices)


Description:

Given indices into the control mesh, return the index in the vector representation Points of that single point.

Parameters:

MV: Whose indices are for.
Indices: To compute the exact point location in MV -> Points


Returned Value:

int: Index of point whose indices are Indices in MV -> Points.


See Also:

MvarMeshIndicesFromIndex MvarGetPointsPeriodicMeshIndices

Keywords:




MvarGetPointsPeriodicMeshIndices

(mvar_aux.c:1249)

Prototype:

  int MvarGetPointsPeriodicMeshIndices(const MvarMVStruct *MV, int *Indices)


Description:

Given indices into the control mesh, return the index in the vector representation Points of that single point. MV can be periodic.

Parameters:

MV: Whose indices are for.
Indices: To compute the exact point location in MV -> Points


Returned Value:

int: Index of point whose indices are Indices in MV -> Points.


See Also:

MvarMeshIndicesFromIndex MvarGetPointsMeshIndices

Keywords:




MvarHFDistAntipodalCrvCrvC1

(hasdrf2d.c:149)

Prototype:

  MvarPtStruct *MvarHFDistAntipodalCrvCrvC1(const CagdCrvStruct *Crv1,
                                            const CagdCrvStruct *Crv2,
                                            CagdRType Epsilon)


Description:

Computes the antipodal points of the given two curves by solving:
    < C2(r) - C1(s), C1'(s) > = 0,
    < C2(r) - C1(t), C1'(t) > = 0.


Parameters:

Crv1, Crv2: The two curves to solve for their antipodal locations.
Epsilon: Tolerance of computation.


Returned Value:

MvarPtStruct *: List of pairs of parameters in the s & t coefficients.


See Also:

MvarCrvAntipodalPoints

Keywords:




MvarHFDistAntipodalCrvSrfC1

(hasdrf3d.c:143)

Prototype:

  MvarPtStruct *MvarHFDistAntipodalCrvSrfC1(const CagdSrfStruct *Srf1,
                                            const CagdCrvStruct *Crv2)


Description:


Computes the antipodal points of the given surface and curve by solving:
    < C2(t) - S1(u, v), dS1(u, v) / du > = 0,
    < C2(t) - S1(u, v), dS1(u, v) / dv > = 0,
    < C2(t) - S1(u, v), dC2(t) / dt > = 0.


Parameters:

Srf1, Crv2: A surface and a curve to solve for their antipodal locations.


Returned Value:

MvarPtStruct *: List of pairs of parameters in the uv & t coefficients.


See Also:

MvarSrfAntipodalPoints

Keywords:




MvarHFDistAntipodalSrfSrfC1

(hasdrf3d.c:389)

Prototype:

  MvarPtStruct *MvarHFDistAntipodalSrfSrfC1(const CagdSrfStruct *Srf1,
                                            const CagdSrfStruct *Srf2)


Description:


Computes the antipodal points of the given two surfaces by solving:
    < S2(r, t) - S1(u, v), dS1(u, v) / du > = 0,
    < S2(r, t) - S1(u, v), dS1(u, v) / dv > = 0,
    < S2(r, t) - S1(u, v), dS2(s, t) / ds > = 0,
    < S2(r, t) - S1(u, v), dS2(s, t) / ds > = 0.


Parameters:

Srf1, Srf2: The two surfaces to solve for their antipodal locations.


Returned Value:

MvarPtStruct *: List of pairs of parameters in the uv & st coefficients.


See Also:



Keywords:




MvarHFDistBisectSrfSrfC1

(hasdrf3d.c:547)

Prototype:

  MvarHFDistPairParamStruct *MvarHFDistBisectSrfSrfC1(const CagdSrfStruct *Srf1,
                                                      const CagdSrfStruct *Srf2)


Description:


Compute the intersection locations of (C^1 cont) Srf2 with the self bisectors of (C^1 cont.) Srf1, if any. The solution is computed by solving the following set of contraints:
    || S2(s, t) - S1(a, b) ||^2 == || S2(s, t) - S1(c, d) ||^2,
    < S2((s, t) - S1(a, b), dS1(a, b)/da > = 0,
    < S2((s, t) - S1(a, b), dS1(a, b)/db > = 0,
    < S2((s, t) - S1(c, d), dS1(c, d)/dc > = 0.
    < S2((s, t) - S1(c, d), dS1(c, d)/dd > = 0.

augumented with
    < (S1(a, b) - S(c, d)) x (S1(a, b) + S1(c, d) - 2S2(s, t)),
      NS2(s, t) > = 0,

where NS2 is a (non normalized) normnal field of S2. The first equation above (equal distance to two different locations in C1) could be rewritten as:
    < S1(a, b) + S1(c, d) - 2S2(s, t), S1(a, b) - S1(c, d) > = 0,

which hints to the fact that this equation vanish for ((a, b) == (c, d)). Hence, in the solution process, we eliminate the ((a, b) == (c, d)) factors from it.

Parameters:

Srf1: First surface to intersect its self-bisector with Srf2.
Srf2: Second surface to intersect against the self bisector of Srf1.


Returned Value:

MvarHFDistPairParamStruct *: Linked list of all detected intersections. Note each detected intersection holds two parameter locations of Srf1.


See Also:



Keywords:




MvarHFDistCrvCrvC1

(hasdrf2d.c:1039)

Prototype:

  CagdRType MvarHFDistCrvCrvC1(const CagdCrvStruct *Crv1,
                               const CagdCrvStruct *Crv2,
                               MvarHFDistParamStruct *Param1,
                               MvarHFDistParamStruct *Param2,
                               CagdRType Epsilon)


Description:

Computes the Hausdorff distance between two C^1 cont. curves, C1 and C2. The curves are assumed to be either in R2 or R3. The extreme distance between two curves could happen at: + The end points of the curves. + Antipodal locations where:
    C1'(t)  = 0,
    C2'(r)  = 0.

+ Locations where C1 crosses the self bisector of C2 (or vice versa): Let Bi(x,y) = 0 be self bisector of Ci(t), and Cj(r) = (xj(r), yj(r)). Then, solve for:
    || C2(r) - C1(s) ||^2 == || C2(r) - C1(t) ||^2,
    < C2(r) - C1(s), C1'(s) > = 0,
    < C2(r) - C1(t), C1'(t) > = 0.

All the above equations hold for R2 and for R3.

Parameters:

Crv1: First Crv to measure its hausdorff distance to Crv2.
Crv2: Second Crv to measure its hausdorff distance to Crv1.
Param1: Where to return the parameter value(s) of Crv1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Crv2 with the maximal Hausdorff distance. Can be more than one location!
Epsilon: Tolerance of computation.


Returned Value:

CagdRType: The Hausdorff distance.


See Also:



Keywords:




MvarHFDistFromCrvToCrvC1

(hasdrf2d.c:850)

Prototype:

  CagdRType MvarHFDistFromCrvToCrvC1(const CagdCrvStruct *CCrv1,
                                     const CagdCrvStruct *CCrv2,
                                     MvarHFDistParamStruct *Param1,
                                     MvarHFDistParamStruct *Param2,
                                     CagdRType Epsilon)


Description:

Computes the one sided Hausdorff distance between two C^1 cont. curves, from C1 to C2. The curves are assumed to be either in R2 or R3. The one sided extreme distance between two curves could happen at: + The end points of curve C1 or curve C2. + Antipodal locations or locations where:
    C1'(t)  = 0,
    C2'(r)  = 0,

that are also global distance minima from C1(t) to any point on C2. + Locations where C1 crosses the self bisector of C2 that are also local distance minima from C1 to any point on C2. All the above equations hold for R2 and for R3.

Parameters:

CCrv1: First Crv to measure its hausdorff distance to CCrv2.
CCrv2: Second Crv to measure its hausdorff distance from CCrv1.
Param1: Where to return the parameter value(s) of Crv1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Crv2 with the maximal Hausdorff distance. Can be more than one location!
Epsilon: Tolerance of computation.


Returned Value:

CagdRType: The Hausdorff distance.


See Also:



Keywords:




MvarHFDistFromCrvToSrfC1

(hasdrf3d.c:278)

Prototype:

  CagdRType MvarHFDistFromCrvToSrfC1(const CagdCrvStruct *Crv1,
                                     const CagdSrfStruct *Srf2,
                                     MvarHFDistParamStruct *Param1,
                                     MvarHFDistParamStruct *Param2)


Description:

Computes the one sided Hausdorff distance between a C^1 cont. curve and a C^1 cont. surface, from C1 to S2. The shapes are assumed to be in R3 and non intersecting. The one sided extreme distance between the two shapes could happen at: + The corner/end points of curve C1 or surface S2. + Antipodal locations between the two shapes. + Locations where C1 crosses the self bisector of S2 that are also local distance minima from C1 to any point on S2.

Parameters:

Crv1: First crv to measure its hausdorff distance to Srf2.
Srf2: Second srf to measure its hausdorff distance from Crv1.
Param1: Where to return the parameter value(s) of Crv1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Srf2 with the maximal Hausdorff distance. Can be more than one location!


Returned Value:

CagdRType: The Hausdorff distance.


See Also:

MvarHFDistFromSrfToSrfC1 MvarHFDistFromSrfToCrvC1

Keywords:




MvarHFDistFromSrfToCrvC1

(hasdrf3d.c:316)

Prototype:

  CagdRType MvarHFDistFromSrfToCrvC1(const CagdSrfStruct *Srf1,
                                     const CagdCrvStruct *Crv2,
                                     MvarHFDistParamStruct *Param1,
                                     MvarHFDistParamStruct *Param2)


Description:

Computes the one sided Hausdorff distance between a C^1 cont. surface and a C^1 cont. curve, from S1 to C2 The shapes are assumed to be in R3 and non intersecting. The one sided extreme distance between the two shapes could happen at: + The corner/end points of surface S1 or curve C2. + Antipodal locations between the two shapes. + Locations where S1 crosses the self bisector of C2 that are also local distance minima from S1 to any point on C2.

Parameters:

Srf1: First srf to measure its hausdorff distance to Crv2.
Crv2: Second crv to measure its hausdorff distance from Srf1.
Param1: Where to return the parameter value(s) of Srf1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Crv2 with the maximal Hausdorff distance. Can be more than one location!


Returned Value:

CagdRType: The Hausdorff distance.


See Also:

MvarHFDistFromSrfToSrfC1

Keywords:




MvarHFDistFromSrfToSrfC1

(hasdrf3d.c:618)

Prototype:

  CagdRType MvarHFDistFromSrfToSrfC1(const CagdSrfStruct *CSrf1,
                                     const CagdSrfStruct *CSrf2,
                                     MvarHFDistParamStruct *Param1,
                                     MvarHFDistParamStruct *Param2)


Description:

Computes the one sided Hausdorff distance between two C^1 cont. surfaces from S1 to S2. The surfaces are assumed to be in R3 and non intersecting. The one sided extreme distance between two surfaces could happen at: + The corner points of surface S1 or surface S2. + Antipodal locations between the two surfaces. + Locations where S1 crosses the self bisector of S2 that are also local distance minima from S1 to any point on S2.

Parameters:

CSrf1: First Srf to measure its hausdorff distance to Srf2.
CSrf2: Second Srf to measure its hausdorff distance from Srf1.
Param1: Where to return the parameter value(s) of Srf1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Srf2 with the maximal Hausdorff distance. Can be more than one location!


Returned Value:

CagdRType: The Hausdorff distance.


See Also:



Keywords:




MvarHFDistInterBisectCrvCrvC1

(hasdrf2d.c:592)

Prototype:

  MvarHFDistPairParamStruct *MvarHFDistInterBisectCrvCrvC1(
                                                     const CagdCrvStruct *CCrv1,
                                                     const CagdCrvStruct *CCrv2,
                                                     CagdRType Epsilon)


Description:

Compute the intersection locations of (C^1 cont) Crv2 with the self bisectors of (C^1 cont.) Crv1, if any. The solution is computed by solving the following cases: 1. The curve-curve self bisector of Crv1, intersected with Crv2:
    || C2(w) - C1(u) ||^2 == || C2(w) - C1(v) ||^2,
    < C2(w) - C1(u), C1'(u) > = 0,
    < C2(w) - C1(v), C1'(v) > = 0.

The first equations above (equal distance to two different locations in C1) could be rewritten as:
    < C1(u) + C1(v) - 2C2(w), C1(u) - C1(v) > = 0,

which hints to the fact that this equation vanish for (u == v). Hence, in the solution process, we eliminate the (u - v) factors from it. 2. Endpoint-curve self bisectors of Crv1, intersected with Crv2 (2 cases): Let B(t) be equal to the self bisector of Crv1 with one of its end points. Then, solve for B(t) = C2(w). 3. Endpoint-Endpoint self bisectors of Crv1, intersected with Crv2: solved as a line (Endpoint-Endpoint bisector) - Crv2 intersection.

Parameters:

CCrv1: First curve to intersect its self-bisector with Crv2.
CCrv2: Second curve to intersect against the self bisector of Crv1.
Epsilon: Tolerance of computation.


Returned Value:

MvarHFDistPairParamStruct *: Linked list of all detected intersections. Note each detected intersection holds two parameters of Crv1.


See Also:



Keywords:




MvarHFDistInterBisectCrvCrvC1Crvtr

(hasdrf2d.c:271)

Prototype:

  MvarHFDistPairParamStruct *MvarHFDistInterBisectCrvCrvC1Crvtr(
                                                            CagdCrvStruct *Crv1,
                                                            CagdCrvStruct *Crv2,
                                                            CagdRType Epsilon)


Description:

Old version of MvarHFDistInterBisectCrvCrvC1 that splits the input curves at curvature max. locations whereas MvarHFDistInterBisectCrvCrvC1 eliminates the (u - v) terms directly. Computes the intersection locations of (C^1 cont) Crv2 with the self bisectors of (C^1 cont.) Crv1, if any. The solution is computed by solving the following cases: 1. The curve-curve self bisector of Crv1, intersected with Crv2:
    || C2(w) - C1(u) ||^2 == || C2(w) - C1(v) ||^2,
    < C2(w) - C1(u), C1'(u) > = 0,
    < C2(w) - C1(v), C1'(v) > = 0.

The first equations above (equal distance to two different locations in C1) could be rewritten as:
    < C1(u) + C1(v) - 2C2(w), C1(u) - C1(v) > = 0,

which hints to the fact that this equation vanish for (u == v). To speed up the process we also add a constraint that the distance from C2 to its two foot point should be greater than the radius of curvature of C1. 2. Endpoint-curve self bisectors of Crv1, intersected with Crv2 (2 cases): Let B(t) be equal to the self bisector of Crv1 with one of its end points. Then, solve for B(t) = C2(w). 3. Endpoint-Endpoint self bisectors of Crv1, intersected with Crv2: solved as a line (Endpoint-Endpoint bisector) - Crv2 intersection.

Parameters:

Crv1: First curve to intersect its self-bisector with Crv2.
Crv2: Second curve to intersect against the self bisector of Crv1.
Epsilon: Tolerance of computation.


Returned Value:

MvarHFDistPairParamStruct *: Linked list of all detected intersections. Note each detected intersection holds two parameters of Crv1.


See Also:

MvarHFDistInterBisectCrvCrvC1

Keywords:




MvarHFDistInterBisectSrfSrfC1

(hasdrf3d.c:580)

Prototype:

  MvarHFDistPairParamStruct *MvarHFDistInterBisectSrfSrfC1(
                                                      const CagdSrfStruct *Srf1,
                                                      const CagdSrfStruct *Srf2)


Description:

Compute the intersection locations of (C^1 cont) Srf2 with the self bisectors of (C^1 cont.) Srf1, if any. The solution is computed by solving the following set of contraints: 1. The surface-surface self bisector of Srf1, intersected with Srf2 2. boundary-curve self bisectors of Srf1, intersected with Srf2 3. corner-point self bisectors of Srf1, intersected with Srf2

Parameters:

Srf1: First curve to intersect its self-bisector with Srf2.
Srf2: Second curve to intersect against the self bisector of Srf1.


Returned Value:

MvarHFDistPairParamStruct *: Linked list of all detected intersections. Note each detected intersection holds two parameters locations of Srf1.


See Also:



Keywords:




MvarHFDistPointSrfC1

(hasdrf3d.c:44)

Prototype:

  CagdRType MvarHFDistPointSrfC1(const CagdPType P,
                                 const CagdSrfStruct *Srf,
                                 MvarHFDistParamStruct *Param,
                                 CagdBType MinDist)


Description:

Computes the Hausdorff distance between a point and a C^1 cont. surface. The surface and point are assumed to be either in R3. The extreme distance between a point and a surface could happen either at the corner points of surface Srf, the boundary curves of Srf, or when
    dS'(u, v)/du = 0,
    dS'(u, v)/dv = 0.


Parameters:

P: Point to measure its Hausdorff distance to surface Srf.
Srf: Srf to measure its hausdorff distance to point Pt.
Param: Where to return the parameter value with the maximal distance.
MinDist: TRUE for minimal distance, FALSE for maximal.


Returned Value:

CagdRType: The Hausdorff distance.


See Also:

SymbDistSrfPoint

Keywords:




MvarHFDistSrfCrvC1

(hasdrf3d.c:349)

Prototype:

  CagdRType MvarHFDistSrfCrvC1(const CagdSrfStruct *Srf1,
                               const CagdCrvStruct *Crv2,
                               MvarHFDistParamStruct *Param1,
                               MvarHFDistParamStruct *Param2)


Description:


Computes Hausdorff distance between a C^1 cont. surface and a C^1 cont. curve, S1 and C2. The shapes are assumed to be in R3 and non intersecting.

Parameters:

Srf1: First srf to measure its hausdorff distance to Crv2.
Crv2: Second crv to measure its hausdorff distance to Srf1.
Param1: Where to return the parameter value(s) of Srf1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Crv2 with the maximal Hausdorff distance. Can be more than one location!


Returned Value:

CagdRType: The Hausdorff distance.


See Also:

MvarHFDistSrfSrfC1

Keywords:




MvarHFDistSrfSrfC1

(hasdrf3d.c:785)

Prototype:

  CagdRType MvarHFDistSrfSrfC1(const CagdSrfStruct *Srf1,
                               const CagdSrfStruct *Srf2,
                               MvarHFDistParamStruct *Param1,
                               MvarHFDistParamStruct *Param2)


Description:

Computes Hausdorff distance between two C^1 cont. surfaces, S1 and S2. The surfaces are assumed to be in R3 and non intersecting.

Parameters:

Srf1: First Srf to measure its hausdorff distance to Srf2.
Srf2: Second Srf to measure its hausdorff distance to Srf1.
Param1: Where to return the parameter value(s) of Srf1 with the maximal Hausdorff distance. Can be more than one location!
Param2: Where to return the parameter value(s) of Srf2 with the maximal Hausdorff distance. Can be more than one location!


Returned Value:

CagdRType: The Hausdorff distance.


See Also:



Keywords:




MvarHFExtremeLclDistPointCrvC1

(hasdrf2d.c:98)

Prototype:

  CagdRType MvarHFExtremeLclDistPointCrvC1(CagdPType P,
                                           const CagdCrvStruct *Crv1,
                                           const CagdCrvStruct *Crv2,
                                           MvarHFDistParamStruct *Param2,
                                           CagdRType Epsilon)


Description:

Computes the local extreme distance between a point P of Crv1 and Crv2. At the local extreme distance location on Crv2, denoted Q, verify that Q is closest to P than to any other location on Crv1. Returns maximal local extreme distance found, 0.0 if none.

Parameters:

P: Point on Crv1 to measure its extreme distance to curve Crv2.
Crv1: First curve that contains P.
Crv2: Second curve to measure extreme distance to from P.
Param2: Where to return the parameter value of Crv2 is returned.
Epsilon: Tolerance of computation.


Returned Value:

CagdRType: The local extreme distance found, 0.0 if none.


See Also:

SymbLclDistCrvPoint

Keywords:




MvarHFExtremeLclDistPointSrfC1

(hasdrf3d.c:89)

Prototype:

  CagdRType MvarHFExtremeLclDistPointSrfC1(const CagdPType P,
                                           const CagdSrfStruct *Srf1,
                                           const CagdSrfStruct *Srf2,
                                           MvarHFDistParamStruct *Param2)


Description:

Computes the local extreme distance between a point P of Srf1 and Srf2. At the local extreme distance location on Srf2, denoted Q, verify that Q is closest to P than to any other location on Srf1. Returns maximal local extreme distance found, 0.0 if none.

Parameters:

P: Point on Srf1 to measure its extreme distance to curve Srf2.
Srf1: First curve that contains P.
Srf2: Second curve to measure extreme distance to from P.
Param2: Where to return the parameter value of Srf2 is returned.


Returned Value:

CagdRType: The local extreme distance found, 0.0 if none.


See Also:

SymbLclDistSrfPoint

Keywords:




MvarImplicitCrvExtreme

(mvartopo.c:34)

Prototype:

  MvarPtStruct *MvarImplicitCrvExtreme(const CagdSrfStruct *Srf,
                                       CagdSrfDirType Dir,
                                       CagdRType SubdivTol,
                                       CagdRType NumerTol)


Description:

Computes U or V extreme values of the zero set (implicit form) of Srf = 0.

Parameters:

Srf: Implicit surface definition.
Dir: U to compute U-extreme values in Srf = 0, V for V-extreme.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumerTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: The computed extreme values, in the parametric space of surface Srf.


Keywords:




MvarLclDistSrfLine

(mvardist.c:285)

Prototype:

  MvarPtStruct *MvarLclDistSrfLine(const CagdSrfStruct *CSrf,
                                   const CagdPType LnPt,
                                   const CagdVType LnDir,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol)


Description:

Given a surface and a line, finds the nearest point (if MinDist) or the farthest location (if MinDist FALSE) from the surface to the given line. This function assumes the surface does not intersect the line. Returned is the parameter value of the surface. Only internal extrema are considered. Let S and N be the surface and its normal field. Then the extrema points are computed as the simultaneous solution of,
  < (S - LnPt) x N, LnDir > = 0,
  < N, LnDir > = 0.


Parameters:

CSrf: The surface to find its nearest (farthest) point to Line.
LnPt: A point on the line to consider.
LnDir: The direction of the line to consider.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

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


See Also:

MvarDistSrfLine MvarDistCrvLine

Keywords:

surface line distance


MvarLclDistSrfPoint

(mvardist.c:140)

Prototype:

  MvarPtStruct *MvarLclDistSrfPoint(const CagdSrfStruct *CSrf,
                                    const CagdPType Pt,
                                    CagdRType SubdivTol,
                                    CagdRType NumericTol)


Description:


Given a surface and a point, find the local extremum distance points on the surface to the given point. Only interior extrema are considered. Returned is a list of parameter value with local extremum. Computes the simultaneous zeros of:
      (Srf(u, v) - Pt) . dSrf(u, v)/Du = 0.
      (Srf(u, v) - Pt) . dSrf(u, v)/Dv = 0.


Parameters:

CSrf: The surface to find its extreme distance locations to Pt.
Pt: The point to find the extreme distance locations from Srf.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

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


Keywords:

surface point distance


MvarLinePlaneInter

(mvcones.c:283)

Prototype:

  MvarVecStruct *MvarLinePlaneInter(const MvarVecStruct *P,
                                    const MvarVecStruct *V,
                                    const MvarVecStruct *Pln)


Description:


Compute the intersection of a line and a hyperplane, in R^Dim.

Parameters:

P, V: Point and direction of line to intersect with hyperplane. Both P and V are of length Dim.
Pln: Hyperplane to intersect with line. Of length Dim+1.


Returned Value:

MvarVecStruct *: The intersection point.


Keywords:




MvarMSCircOfThreeCurves

(ms_circ.c:233)

Prototype:

  int MvarMSCircOfThreeCurves(const CagdCrvStruct *OrigCrv1,
                              const CagdCrvStruct *OrigCrv2,
                              const CagdCrvStruct *OrigCrv3,
                              CagdRType Center[2],
                              CagdRType *Radius,
                              CagdRType SubdivTol,
                              CagdRType NumerTol)


Description:

Computes the minimum spanning circle to three curves that are disjoint. Assumption is made that the MSC is tangent to all three curves.

Parameters:

OrigCrv1, OrigCrv2, OrigCrv3: The three curves to consider. Curves could be identical.
Center: Center of the computed MSC.
Radius: Radius of the computed MSC.
SubdivTol, NumerTol: Of computation.


Returned Value:

int: TRUE if successful, FALSE otherwise


See Also:

MvarMSCircOfTwoCurves MvarMinSpanCirc MVarIsCrvInsideCirc MvarSkel2DInter3Prims

Keywords:




MvarMSCircOfTwoCurves

(ms_circ.c:66)

Prototype:

  int MvarMSCircOfTwoCurves(const CagdCrvStruct *OrigCrv1,
                            const CagdCrvStruct *OrigCrv2,
                            CagdRType Center[2],
                            CagdRType *Radius,
                            CagdRType SubdivTol,
                            CagdRType NumerTol)


Description:

Computes the minimum spanning circle to two curves that are disjoint. Assumption is made that the MSC is tangent to both curves.

Parameters:

OrigCrv1, OrigCrv2: The two curves to consider.
Center: Center of the computed MSC.
Radius: Radius of the computed MSC.
SubdivTol, NumerTol: Of computation.


Returned Value:

int: TRUE if successful, FALSE otherwise


See Also:

MvarMSCircOfThreeCurves MvarMinSpanCirc MVarIsCrvInsideCirc

Keywords:




MvarMV3VarFactorUMinusV

(hasdrf2d.c:493)

Prototype:

  MvarMVStruct *MvarMV3VarFactorUMinusV(MvarMVStruct *MV)


Description:

Removes a (u - v) factor from the given scalar three-multivariate which is assumed to be a 3-variate F(u, v, w). The u, v parameters are the first two parameters of the 3-variate.

Parameters:

MV: 3-variate (rep. as multivariate) to factor out (u - v) term from.


Returned Value:

MvarMVStruct *: Factored out 3-variate, (rep. as a multivriate).


See Also:

BspSrfFactorUMinusV BzrSrfFactorUMinusV MvarMVBivarFactorUMinusV MvarMV4VarFactorUMinusV MvarMV4VarFactorUMinusR

Keywords:




MvarMV4VarFactorUMinusR

(selfintr.c:248)

Prototype:

  MvarMVStruct *MvarMV4VarFactorUMinusR(const MvarMVStruct *MV)


Description:

Removes a (u - r) factor from the given scalar four multivariate which is assumed to be a 4-variate S(u, v, r, t) Note that typically a Bspline 4-var will not have (u - r) in all its patches so use this function with care - this function does not verify this existence. It is more common to have (u - r) only along symmetric diagonal patches of the Bsplines, after symbolic operations like S1(u, v) - S2(r, t).

Parameters:

MV: 4-variate (rep. as multivariate) to factor out (u - r) term from.


Returned Value:

MvarMVStruct *: Factored out bivariate, (rep. as a multivriate).


See Also:

BspSrfFactorUMinusV BzrSrfFactorUMinusV MvarMVBivarFactorUMinusV MvarMV4VarFactorUMinusV MvarMV3VarFactorUMinusV

Keywords:




MvarMV4VarFactorUMinusV

(selfintr.c:184)

Prototype:

  MvarMVStruct *MvarMV4VarFactorUMinusV(const MvarMVStruct *MV)


Description:

Removes a (u - v) factor from the given scalar four multivariate which is assumed to be a 4-variate F(u, v, r, t). The u, v parameters are the first two parameters of the 4-variate. The (u - v) terms are factored out along the diagonal of the third/fourth parameters which are assumed to be symmetric as well. Note that typically a Bspline 4-var will not have (u - v) in all its 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 Bsplines, after symbolic operations like S1(u, v) - S2(r, t).

Parameters:

MV: 4-variate (rep. as multivariate) to factor out (u - v) term from.


Returned Value:

MvarMVStruct *: Factored out 4-variate, (rep. as a multivriate).


See Also:

BspSrfFactorUMinusV BzrSrfFactorUMinusV MvarMVBivarFactorUMinusV MvarMV4VarFactorUMinusR MvarMV3VarFactorUMinusV

Keywords:




MvarMVAdd

(mvar_sym.c:37)

Prototype:

  MvarMVStruct *MvarMVAdd(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

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

Parameters:

MV1, MV2: Two multivariate to add up coordinatewise.


Returned Value:

MvarMVStruct *: The summation of MV1 + MV2 coordinatewise.


See Also:

MvarMVSub MvarMeshAddSub MvarMVMult

Keywords:

addition symbolic computation multivariates


MvarMVAuxDomainSlotCopy

(mvar_aux.c:248)

Prototype:

  int MvarMVAuxDomainSlotCopy(MvarMVStruct *MVDst, const MvarMVStruct *MVSrc)


Description:

Copies the optional aux. domain slot from MVSrc to MVDst.

Parameters:

MVDst: Destination multivariate to copy domain slot to.
MVSrc: Source multivariate to copy domain slot from.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MvarMVAuxDomainSlotReset MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotSetRel

Keywords:




MvarMVAuxDomainSlotGet

(mvar_aux.c:347)

Prototype:

  int MvarMVAuxDomainSlotGet(const MvarMVStruct *MV,
                             CagdRType *Min,
                             CagdRType *Max,
                             int Dir)


Description:

Gets one aux. domain range in the given Direction.

Parameters:

MV: Multivariate to get its aux. domain slot.
Min, Max: The domain of this Bezier multivariate.
Dir: The direction to get the domain of MV.


Returned Value:

int: TRUE if aux. domain exist and can get domain, FALSE otherwise.


See Also:

MvarMVAuxDomainSlotReset MvarMVAuxDomainSlotCopy MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotSetRel

Keywords:




MvarMVAuxDomainSlotReset

(mvar_aux.c:216)

Prototype:

  void MvarMVAuxDomainSlotReset(MvarMVStruct *MV)


Description:

Resets an optional aux. domain slot inside MV for use in cases where MV has no explict domain (such as Bezier and/or Power basis).

Parameters:

MV: Multivariate to reset domain slot.


Returned Value:

void


See Also:

MvarMVAuxDomainSlotCopy MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotSetRel

Keywords:




MvarMVAuxDomainSlotSet

(mvar_aux.c:286)

Prototype:

  void MvarMVAuxDomainSlotSet(MvarMVStruct *MV,
                              CagdRType Min,
                              CagdRType Max,
                              int Dir)


Description:

Sets one aux. domain range in the given direction.

Parameters:

MV: Multivariate to set its aux. domain slot.
Min, Max: The domain of this Bezier multivariate.
Dir: The direction where to set the MV domain.


Returned Value:

void


See Also:

MvarMVAuxDomainSlotReset MvarMVAuxDomainSlotCopy MvarMVAuxDomainSlotGet MvarMVAuxDomainSlotSetRel

Keywords:




MvarMVAuxDomainSlotSetRel

(mvar_aux.c:316)

Prototype:

  void MvarMVAuxDomainSlotSetRel(MvarMVStruct *MV,
                                 CagdRType Min,
                                 CagdRType Max,
                                 int Dir)


Description:

Sets one aux. domain range in the given direction. Input Min/Max is relative to current domain.

Parameters:

MV: Multivariate to set its aux. domain slot.
Min, Max: The relative to current domain new interval of this Bezier multivariate.
Dir: The direction where to set the MV domain.


Returned Value:

void


See Also:

MvarMVAuxDomainSlotReset MvarMVAuxDomainSlotCopy MvarMVAuxDomainSlotSet MvarMVAuxDomainSlotGet

Keywords:




MvarMVBBox

(mvar_aux.c:676)

Prototype:

  void MvarMVBBox(const MvarMVStruct *MV, MvarBBoxStruct *BBox)


Description:

Computes a bounding box for a multi-variate freeform function.

Parameters:

MV: To compute a bounding box for.
BBox: Where bounding information is to be saved.


Returned Value:

void


Keywords:

bbox bounding box


MvarMVBiTangents

(mvtangnt.c:65)

Prototype:

  MvarPtStruct *MvarMVBiTangents(const MvarMVStruct *CMV1,
                                 const MvarMVStruct *CMV2,
                                 int Orientation,
                                 CagdRType SubdivTol,
                                 CagdRType NumericTol)


Description:

Computes bi-tangents of freeform bivariate. Let,
      DMV = MV1(u, v) - MV2(r, s)

then, computed the simultaneous solution of the following three equations:
  d MV1   d MV1  d MV2
< ----- x -----, ----- > = 0,
    du      dv     dr


  d MV1   d MV1  d MV2
< ----- x -----, ----- > = 0,
    du      dv     ds


  d MV1   d MV1
< ----- x -----, DMV > = 0.
    du      dv

If an orientation" value 1 or -1 is prescribed, then only bitangent surfaces with similar (1) or opposite (-1) orientations are computed and returned.

Parameters:

CMV1, CMV2: The two multivariates to compute the bi-tangents for. If MV2 == NULL, the self bi-tangents of MV1 are computed.
Orientation: 0 for no effect, -1 or +1 for a request to get opposite or similar normal orientation bi tangencies only.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Points on the bi-tangents of the two multivariates.


See Also:

SymbTangentToCrvAtTwoPts MvarMVBiTangents2 MvarMVTriTangents

Keywords:

bi-tangent


MvarMVBiTangents2

(mvtangnt.c:219)

Prototype:

  MvarPtStruct *MvarMVBiTangents2(const MvarMVStruct *CMV1,
                                  const MvarMVStruct *CMV2,
                                  CagdRType SubdivTol,
                                  CagdRType NumericTol)


Description:

Computes bi-tangents of freeform bivariate. Let,
      DMV = MV1(u, v) - MV2(r, s)

then, computed the simultaneous solution of the following two equations:
  d MV1   d MV1
< ----- x -----, DMV > = 0,
    du      dv


  d MV2   d MV2
< ----- x -----, DMV > = 0,
    dr      ds


Parameters:

CMV1, CMV2: The two multivariates to compute the bi-tangents for. If MV2 == NULL, the self bi-tangents of MV1 are computed.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Points on the bi-tangents of the two multivariates.


See Also:

SymbTangentToCrvAtTwoPts MvarMVBiTangents MvarMVTriTangents

Keywords:

bi-tangent


MvarMVBivarFactorUMinusV

(selfintr.c:84)

Prototype:

  MvarMVStruct *MvarMVBivarFactorUMinusV(const MvarMVStruct *MV)


Description:


Removes a (u - v) factor from the given scalar multivariate which is assumed to be a bivariate S(u, v). Note that typically a Bspline 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 Bspline surface, after symbolic operations like C1(u) - C2(v).

Parameters:

MV: Bivariate (rep. as multivriate) to factor out a (u - v) term from.


Returned Value:

MvarMVStruct *: Factored out bivariate, (rep. as a multivriate).


See Also:

BspSrfFactorUMinusV BzrSrfFactorUMinusV MvarMV4VarFactorUMinusVRMinusT MvarMV3VarFactorUMinusV

Keywords:




MvarMVConesOverlap

(mvcones.c:1261)

Prototype:

  CagdBType MvarMVConesOverlap(MvarMVStruct * const *MVs, int NumOfZeroMVs)


Description:

Computes the tangency anti-cones of the set of multivariate constraints, and returns whether they overlap or not.

Parameters:

MVs: Multivariates to derive their tangentcy anti-cones.
NumOfZeroMVs: Size of the vector MVs.


Returned Value:

CagdBType: TRUE if overlap, FALSE if not.


See Also:

MVarMVNormalCone

Keywords:




MvarMVCopy

(mvar_gen.c:263)

Prototype:

  MvarMVStruct *MvarMVCopy(const MvarMVStruct *MV)


Description:

Allocates and duplicates all slots of a multi-variate structure.

Parameters:

MV: Multi-Variate to duplicate


Returned Value:

MvarMVStruct *: Duplicated multi-variate.


Keywords:

multi-variates


MvarMVCopyList

(mvar_gen.c:390)

Prototype:

  MvarMVStruct *MvarMVCopyList(const MvarMVStruct *MVList)


Description:

Duplicates a list of multi-variate structures.

Parameters:

MVList: List of multi-variates to duplicate.


Returned Value:

MvarMVStruct *: Duplicated list of multi-variates.


Keywords:

multi-variates


MvarMVCrossProd

(mvar_sym.c:450)

Prototype:

  MvarMVStruct *MvarMVCrossProd(const MvarMVStruct *MV1,
                                const MvarMVStruct *MV2)


Description:

Given two multivariates - computes their cross product. Returned multivariate is a vector multivariate representing the cross product of the two given multivariates.

Parameters:

MV1, MV2: Two multivariate to multiply and compute a cross product for.


Returned Value:

MvarMVStruct *: A vector multivariate representing the cross product of MV1 x MV2.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVInvert MvarMVCrossProd2D

Keywords:

product cross product multivariates mbolic computation


MvarMVCrossProd2D

(mvar_sym.c:546)

Prototype:

  MvarMVStruct *MvarMVCrossProd2D(const MvarMVStruct *MV1X,
                                  const MvarMVStruct *MV1Y,
                                  const MvarMVStruct *MV2X,
                                  const MvarMVStruct *MV2Y)


Description:

Given four multivariates - computes their 2D cross product. Returned multivariate is a scalar multivariate representing the cross product of the four given multivariates, as X1 * Y2 - X2 * Y1.

Parameters:

MV1X, MV1Y: First pair of scalar multivariates (X, Y) of first funcs.
MV2X, MV2Y: Second pair of scalar multivariates (X, Y) of second funcs.


Returned Value:

MvarMVStruct *: A scalar multivariate representing the cross product of MV1X * MV2Y - MV2X * MV1Y.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVInvert MvarMVCrossProd

Keywords:

product cross product multivariates mbolic computation


MvarMVDegreeRaise

(mvarrais.c:292)

Prototype:

  MvarMVStruct *MvarMVDegreeRaise(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Returns a new multivariate representing the same curve as MV but with its degree raised by one.

Parameters:

MV: To raise its degree.
Dir: Direction of degree raising.


Returned Value:

MvarMVStruct *: A multivariate with same geometry as MV but with one degree higher.


See Also:

MvarMVDegreeRaiseN MvarMVDegreeRaise2 MvarMVPwrDegreeRaise

Keywords:

degree raising


MvarMVDegreeRaise2

(mvarrais.c:335)

Prototype:

  MvarMVStruct *MvarMVDegreeRaise2(MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Returns a new multivariate representing the same curve as MV but with its degree raised by one.

Parameters:

MV: To raise its degree.
Dir: Direction of degree raising.


Returned Value:

MvarMVStruct *: A multivariate with same geometry as MV but with one degree higher.


See Also:

MvarMVDegreeRaise MvarMVDegreeRaise3 MvarMVDegreeRaiseN MvarMVPwrDegreeRaise

Keywords:

degree raising


MvarMVDegreeRaise3

(mvarrais.c:417)

Prototype:

  MvarMVStruct *MvarMVDegreeRaise3(MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Returns a new multivariate representing the same curve as MV but with its degree raised by one.

Parameters:

MV: To raise its degree.
Dir: Direction of degree raising.


Returned Value:

MvarMVStruct *: A multivariate with same geometry as MV but with one degree higher.


See Also:

MvarMVDegreeRaiseN MvarMVDegreeRaise MvarMVDegreeRaise2 MvarMVPwrDegreeRaise

Keywords:

degree raising


MvarMVDegreeRaiseN

(mvarrais.c:33)

Prototype:

  MvarMVStruct *MvarMVDegreeRaiseN(const MvarMVStruct *MV, int *NewOrders)


Description:

Returns a new multivariate representing the same curve as MV but with its degree raised by the NewOrders prescription.

Parameters:

MV: To raise its degree.
NewOrders: A vector prescribing the new orders of MV. Length of this vector is MV -> Dim.


Returned Value:

MvarMVStruct *: A multivariate with same geometry as MV but with higher degrees.


See Also:

MvarMVDegreeRaise MvarMVPwrDegreeRaise MvarMVDegreeRaiseN2

Keywords:

degree raising


MvarMVDegreeRaiseN2

(mvarrais.c:197)

Prototype:

  MvarMVStruct *MvarMVDegreeRaiseN2(MvarMVStruct *MV, int *NewOrders)


Description:

Returns a new multivariate representing the same curve as MV but with its degree raised by the NewOrders prescription.

Parameters:

MV: To raise its degree.
NewOrders: A vector prescribing the new orders of MV. Length of this vector is MV -> Dim.


Returned Value:

MvarMVStruct *: A multivariate with same geometry as MV but with higher degrees.


See Also:

MvarMVDegreeRaise MvarMVPwrDegreeRaise MvarMVDegreeRaiseN

Keywords:

degree raising


MvarMVDerive

(mvar_der.c:29)

Prototype:

  MvarMVStruct *MvarMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)


Description:

Given a multi-variate, computes its partial derivative multi-variate in direction Dir.

Parameters:

MV: Multi-Variate to differentiate.
Dir: Direction of differentiation.


Returned Value:

MvarMVStruct *: Differentiated multi-variate in direction Dir.


Keywords:

multi-variates


MvarMVDeterminant2

(mvar_det.c:34)

Prototype:

  MvarMVStruct *MvarMVDeterminant2(const MvarMVStruct *MV11,
                                   const MvarMVStruct *MV12,
                                   const MvarMVStruct *MV21,
                                   const MvarMVStruct *MV22)


Description:

Computes the expression of MV11 * MV22 - MV12 * MV21, which is a determinant of a 2 by 2 matrix.

Parameters:

MV11, MV12, MV21, MV22: The four factors of the determinant.


Returned Value:

MvarMVStruct *: A scalar field representing the determinant computation.


See Also:

MvarMVDeterminant3 MvarSrfDeterminant2 MvarCrvDeterminant2

Keywords:

determinant


MvarMVDeterminant3

(mvar_det.c:73)

Prototype:

  MvarMVStruct *MvarMVDeterminant3(const MvarMVStruct *MV11,
                                   const MvarMVStruct *MV12,
                                   const MvarMVStruct *MV13,
                                   const MvarMVStruct *MV21,
                                   const MvarMVStruct *MV22,
                                   const MvarMVStruct *MV23,
                                   const MvarMVStruct *MV31,
                                   const MvarMVStruct *MV32,
                                   const MvarMVStruct *MV33)


Description:

Computes the expression of a 3 by 3 determinants.

Parameters:

MV11, MV12, MV13: The nine factors of the determinant.
MV21, MV22, MV23: "
MV31, MV32, MV33: "


Returned Value:

MvarMVStruct *: A scalar field representing the determinant computation.


See Also:

MvarMVDeterminant2 MvarMVDeterminant4 SymbSrfDeterminant3 SymbCrvDeterminant3

Keywords:

determinant


MvarMVDeterminant4

(mvar_det.c:130)

Prototype:

  MvarMVStruct *MvarMVDeterminant4(const MvarMVStruct *MV11,
                                   const MvarMVStruct *MV12,
                                   const MvarMVStruct *MV13,
                                   const MvarMVStruct *MV14,
                                   const MvarMVStruct *MV21,
                                   const MvarMVStruct *MV22,
                                   const MvarMVStruct *MV23,
                                   const MvarMVStruct *MV24,
                                   const MvarMVStruct *MV31,
                                   const MvarMVStruct *MV32,
                                   const MvarMVStruct *MV33,
                                   const MvarMVStruct *MV34,
                                   const MvarMVStruct *MV41,
                                   const MvarMVStruct *MV42,
                                   const MvarMVStruct *MV43,
                                   const MvarMVStruct *MV44)


Description:

Computes the expression of a 4 by 4 determinants.

Parameters:

MV11, MV12, MV13, MV14: The 16 factors of the determinant.
MV21, MV22, MV23, MV24: "
MV31, MV32, MV33, MV34: "
MV41, MV42, MV43, MV44: "


Returned Value:

MvarMVStruct *: A scalar field representing the determinant computation.


See Also:

MvarMVDeterminant3 MvarMVDeterminant5

Keywords:

determinant


MvarMVDeterminant5

(mvar_det.c:212)

Prototype:

  MvarMVStruct *MvarMVDeterminant5(const MvarMVStruct *MV11,
                                   const MvarMVStruct *MV12,
                                   const MvarMVStruct *MV13,
                                   const MvarMVStruct *MV14,
                                   const MvarMVStruct *MV15,
                                   const MvarMVStruct *MV21,
                                   const MvarMVStruct *MV22,
                                   const MvarMVStruct *MV23,
                                   const MvarMVStruct *MV24,
                                   const MvarMVStruct *MV25,
                                   const MvarMVStruct *MV31,
                                   const MvarMVStruct *MV32,
                                   const MvarMVStruct *MV33,
                                   const MvarMVStruct *MV34,
                                   const MvarMVStruct *MV35,
                                   const MvarMVStruct *MV41,
                                   const MvarMVStruct *MV42,
                                   const MvarMVStruct *MV43,
                                   const MvarMVStruct *MV44,
                                   const MvarMVStruct *MV45,
                                   const MvarMVStruct *MV51,
                                   const MvarMVStruct *MV52,
                                   const MvarMVStruct *MV53,
                                   const MvarMVStruct *MV54,
                                   const MvarMVStruct *MV55)


Description:

Computes the expression of a 5 by 5 determinants.

Parameters:

MV11, MV12, MV13, MV14, MV15: The 25 factors of the determinant.
MV21, MV22, MV23, MV24, MV25: "
MV31, MV32, MV33, MV34, MV35: "
MV41, MV42, MV43, MV44, MV45: "
MV51, MV52, MV53, MV54, MV55: "


Returned Value:

MvarMVStruct *: A scalar field representing the determinant computation.


See Also:

MvarMVDeterminant4

Keywords:

determinant


MvarMVDistCrvSrf

(mvardist.c:348)

Prototype:

  MvarMVStruct *MvarMVDistCrvSrf(const CagdCrvStruct *Crv1,
                                 const CagdSrfStruct *Srf2,
                                 int DistType)


Description:

Given a curve and a surface, creates a multivariate scalar field representing the distance function square, between them.

Parameters:

Crv1, Srf2: The two entities, Crv1(t) and Srf2(u, v), to form their distance function square between them as a multivariate 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 Srf2. In cases 2 and 3 the normal field is not normalized.


Returned Value:

MvarMVStruct *: The distance function square d2(t, u, v) of the distance from Crv1(t) to Srf2(u, v).


See Also:

SymbSrfDistCrvCrv SymbCrvCrvInter SymbSrfDistFindPoints MvarMVDistSrfSrf

Keywords:

curve surface distance


MvarMVDistSrfSrf

(mvardist.c:434)

Prototype:

  MvarMVStruct *MvarMVDistSrfSrf(const CagdSrfStruct *Srf1,
                                 const CagdSrfStruct *Srf2,
                                 int DistType)


Description:

Given two surfaces, creates a multivariate scalar field representing the distance function square, between them.

Parameters:

Srf1, Srf2: The two surfaces, Srf1(u, v) and Srf2(r, t), to form their distance function square between them as a multivariate function.
DistType: 0 for distance vector function, 1 for distance square scalar function, 2 for distance vector projected on the normal of Srf1, 3 for distance vector projected on the normal of Srf2. In cases 2 and 3 the normal field is not normalized.


Returned Value:

MvarMVStruct *: The distance function square d2(u, v, r, t) of the distance from Srf1(u, v) to Srf2(r, t).


See Also:

SymbSrfDistCrvCrv SymbCrvCrvInter SymbSrfDistFindPoints MvarMVDistCrvSrf

Keywords:

surface surface distance


MvarMVDomain

(mvar_aux.c:45)

Prototype:

  void MvarMVDomain(const MvarMVStruct *MV,
                    CagdRType *Min,
                    CagdRType *Max,
                    int Axis)


Description:

Given a multi-variate, returns its parametric domain. The Min/Max arrays are assumed to of sufficiently large enough space to hold all dimensions, if Axis == -1.

Parameters:

MV: Multi variate function to consider.
Min: Minimum domains of MV will be placed herein.
Max: Maximum domains of MV will be placed herein.
Axis: axis to extract or -1 for all axes.


Returned Value:

void


See Also:

varMVSetDomain MvarMVSetAllDomains MvarParamInDomain varParamsInDomain

Keywords:

multi-variates


MvarMVDomainAlloc

(mvar_aux.c:114)

Prototype:

  void MvarMVDomainAlloc(MvarMVStruct *MV,
                         CagdRType **MinDmn,
                         CagdRType **MaxDmn)


Description:

Same as MvarMVDomain but also allocate the space to hold the domain.

Parameters:

MV: Multivariate structures to receive its domain.
MinDmn: Array of maximal values.
MaxDmn: Array of minimal values.


Returned Value:

void:


See Also:

MvarMVDomain MvarMVDomainFree

Keywords:




MvarMVDomainFree

(mvar_aux.c:141)

Prototype:

  void MvarMVDomainFree(CagdRType *MinDmn, CagdRType *MaxDmn)


Description:

Deallocates the memory of MV's domain, as allocated by MvarMVDomain2.

Parameters:

MinDmn: Array of maximal values.
MaxDmn: Array of minimal values.


Returned Value:

void:


See Also:

MvarMVDomain MvarMVDomainAlloc

Keywords:




MvarMVDotProd

(mvar_sym.c:326)

Prototype:

  MvarMVStruct *MvarMVDotProd(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

Given two multivariates - computes their dot product. Returned multivariate is a scalar multivariate representing the dot product of the two given multivariates. While typically in R3, the dot product can be computed for any dimension of MV1 and MV2.

Parameters:

MV1, MV2: Two multivariate to multiply and compute a dot product for.


Returned Value:

MvarMVStruct *: A scalar multivariate representing the dot product of MV1 . MV2.


See Also:

MvarMVMult MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVInvert MvarMVCrossProd

Keywords:

product dot product symbolic computation multivariates


MvarMVEval

(mvareval.c:427)

Prototype:

  CagdRType *MvarMVEval(const MvarMVStruct *MV, CagdRType *Params)


Description:

Evaluates the given multivariate function at a given location. Same functionality as MvarMVEval2 but a different and faster implementation for Bezier evaluations.

Parameters:

MV: To evaluate at given Params parametric location.
Params: Parametric location to evaluate MV at.


Returned Value:

CagdRType *: A vector holding all the coefficients of all components of the multi-variate's point type. If for example multi-variate point type is P2, the W, X, and Y will be saved in the first three locations of the returned vector. The first location (index 0) of the returned vector is reserved for the rational coefficient W and XYZ always starts at second location of the returned vector


See Also:

MvarMVEval2 MvarMVEvalGradient MvarMVEvalGradient2

Keywords:

evaluation multi-variates


MvarMVEval2

(mvareval.c:39)

Prototype:

  CagdRType *MvarMVEval2(const MvarMVStruct *MV, CagdRType *Params)


Description:

Evaluates the given multivariate function at a given location. Same functionality as MvarMVEval but a different implementation.

Parameters:

MV: To evaluate at given Params parametric location.
Params: Parametric location to evaluate MV at.


Returned Value:

CagdRType *: A vector holding all the coefficients of all components of the multi-variate's point type. If for example multi-variate point type is P2, the W, X, and Y will be saved in the first three locations of the returned vector. The first location (index 0) of the returned vector is reserved for the rational coefficient W and XYZ always starts at second location of the returned vector (index 1).


See Also:

MvarMVEval MvarMVEvalGradient MvarMVEvalGradient2

Keywords:

evaluation multi-variates


MvarMVEvalGradient

(mvar_der.c:329)

Prototype:

  CagdRType *MvarMVEvalGradient(const MvarMVGradientStruct *MVGrad,
                                CagdRType *Params,
                                int Axis)


Description:

Evaluates the gradient function at the given parameteric location.

Parameters:

MVGrad: Input gradient function to evaluate at.
Params: Parametric location to evaluate gradient at.
Axis: If the input function whose gradient we seek is scalar, Axis will always be zero. However we can also handle input vector functions in which case Axis specifies which function in the vector to compute the gradient for - 0 for X, 1 for Y, etc.


Returned Value:

CagdRType *: The gradient at Params.


See Also:

MvarMVDerive MvarMVFreeGradient MvarMVPrepGradient MvarMVEvalGradient2

Keywords:




MvarMVEvalGradient2

(mvareval.c:536)

Prototype:

  CagdRType *MvarMVEvalGradient2(const MvarMVStruct *MV,
                                 CagdRType *Params,
                                 int *HasOrig)


Description:

Evaluates the gradient of the given multivariate function at a given location, numerically. Allowed for scalar multivariates only.

Parameters:

MV: To evaluate its gradient at given Params parametric location.
Params: Parametric location to evaluate MV at.
HasOrig: TRUE if the cached gradient also contains the original scalar field, as last, additional, coordinate.


Returned Value:

CagdRType *: A vector holding all the coefficients of all components of the multi-variate's point type. If for example multi-variate point type is P2, the W, X, and Y will be saved in the first three locations of the returned vector. The first location (index 0) of the returned vector is reserved for the rational coefficient W and XYZ always starts at second location of the returned vector (index 1).


See Also:

MvarMVEval MvarMVEvalTanPlane MvarMVEvalGradient

Keywords:

evaluation multi-variates gradient


MvarMVEvalTanPlane

(mvareval.c:620)

Prototype:

  MvarPlaneStruct *MvarMVEvalTanPlane(const MvarMVStruct *MV, CagdRType *Params)


Description:

Evaluates the tangent hyperplane of the given multivariate function at a given location, numerically. Assumes a scalar multivariates of n parameters in a space of dimension n+1 (An explicit surface in E3).

Parameters:

MV: To evaluate its gradient at given Params parametric location.
Params: Parametric location to evaluate MV at.


Returned Value:

MvarPlaneStruct *: A hyperplane, allocated dynammically. The tanegnt is normalized so that its last (independent coefficient is one: "A1 X1 + A2 X2 + ... + An Xn + 1". The size, n, is to the dimension of the multivariate.


See Also:

MvarMVEval MvarMVEvalGradient2

Keywords:

evaluation multi-variates gradient


MvarMVFree

(mvar_gen.c:422)

Prototype:

  void MvarMVFree(MvarMVStruct *MV)


Description:

Deallocates and frees all slots of a multi-variate structure.

Parameters:

MV: Multi-Variate to free.


Returned Value:

void


See Also:

MvarMVNew

Keywords:

multi-variates


MvarMVFreeGradient

(mvar_der.c:288)

Prototype:

  void MvarMVFreeGradient(MvarMVGradientStruct *MVGrad)


Description:

Free an gradient function.

Parameters:

MVGrad: Gradient function to free.


Returned Value:

void


See Also:

MvarMVDerive MvarMVPrepGradient MvarMVEvalGradient

Keywords:




MvarMVFreeList

(mvar_gen.c:485)

Prototype:

  void MvarMVFreeList(MvarMVStruct *MVList)


Description:

Deallocates and frees a list of multi-variate structures.

Parameters:

MVList: Multi-Variate list to free.


Returned Value:

void


Keywords:

multi-variates


MvarMVFromMV

(mvareval.c:672)

Prototype:

  MvarMVStruct *MvarMVFromMV(const MvarMVStruct *MV,
                             CagdRType t,
                             MvarMVDirType Dir)


Description:

Extract an isoparametric sub multivariate out of the given tensor product multivariate, or expand its dimension by one.

Parameters:

MV: To extract an isoparametric multi-variate from at parameter value t in direction Dir, or exapand its dimension by one.
t: Parameter value at which to extract the isosurface (if Dir >= 0).
Dir: Direction of isosurface extraction. If Dir is negative, however, its absolute value defines the order of a new axis added as last and new dimension to the given MV.


Returned Value:

MvarMVStruct *: A multi - variate with one less (or more) dimensions.


See Also:

MvarMVReverse MvarMVFromMesh MvarPromoteMVToMV

Keywords:

multi-variates


MvarMVFromMesh

(mvareval.c:858)

Prototype:

  MvarMVStruct *MvarMVFromMesh(const MvarMVStruct *MV,
                               int Index,
                               MvarMVDirType Dir)


Description:

Extract an isoparametric sub multi variate out of the given tensor product multi-variate, or expand its dimension by one.

Parameters:

MV: To extract an isoparametric multi-variate from as a sub-mesh in direction Dir, or exapand its dimension by one.
Index: ndex of sub mesh of MV's mesh in direction Dir.
Dir: Direction of isosurface extraction. If Dir is negative, however, its absolute value defines the order of a new axis added as last and new dimension to the given MV.


Returned Value:

MvarMVStruct *: A multi - variate with one less (or more) dimensions.


See Also:

MvarMVReverse MvarMVFromMVm MvarPromoteMVToMV

Keywords:

multi-variates


MvarMVIntersPtOnBndry

(mvar_aux.c:541)

Prototype:

  MvarPtStruct *MvarMVIntersPtOnBndry(MvarMVStruct *MV,
                                      MvarPtStruct *PointIns,
                                      MvarPtStruct *PointOuts)


Description:

Computes the intersection point of line (PoinIns, PointOuts) with the boundary of the domain of multivariate MV.

Parameters:

MV: Multivariate structure.
PointIns: point inside the domain.
PointOuts: point outside the domain.


Returned Value:

MvarPtStruct *: The intersection point.


See Also:

MvarParamsInDomain

Keywords:




MvarMVInvert

(mvar_sym.c:161)

Prototype:

  MvarMVStruct *MvarMVInvert(const MvarMVStruct *MV)


Description:

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

Parameters:

MV: A scalar multivariate to compute a reciprocal value for.


Returned Value:

MvarMVStruct *: A rational scalar multivariate that is equal to the reciprocal value of MV.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVMult MvarMVCrossProd

Keywords:

division symbolic computation reciprocal value ltivariates


MvarMVListBBox

(mvar_aux.c:697)

Prototype:

  void MvarMVListBBox(const MvarMVStruct *MVs, MvarBBoxStruct *BBox)


Description:

Computes a bounding box for a list of multi-variate freeform function.

Parameters:

MVs: To compute a bounding box for.
BBox: Where bounding information is to be saved.


Returned Value:

void


Keywords:

bbox bounding box


MvarMVMatTransform

(mvar_gen.c:1385)

Prototype:

  void MvarMVMatTransform(MvarMVStruct *MV, CagdMType Mat)


Description:

Transforms, in place, the given MV as specified by homogeneous matrix Mat.

Parameters:

MV: Multi-variate to transform.
Mat: Homogeneous transformation to apply to MV.


Returned Value:

void


Keywords:

multi-variates


MvarMVMergeScalar

(mvar_sym.c:810)

Prototype:

  MvarMVStruct *MvarMVMergeScalar(MvarMVStruct * const *ScalarMVs)


Description:

Given a set of scalar multivariates, treat them as coordinates into a new multivariates Assumes at least X axis not NULL when a scalar multivariate is returned. Assumes all axes are either E1 or P1 in which the weights are assumed to be identical and can be ignored if W axis exists or copied otherwise.

Parameters:

ScalarMVs: A vector of scalar MVs. Location 0 holds the W or NULL otherwise, Location 1 holds the X axis and so on. This vector is assumed to have MVAR_MAX_PT_COORD coordinates.


Returned Value:

MvarMVStruct *: A new multivariates constructed from given scalar multivariates.


See Also:

MvarMVSplitScalar

Keywords:

merge multivariates symbolic computation


MvarMVMult

(mvar_sym.c:121)

Prototype:

  MvarMVStruct *MvarMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

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

Parameters:

MV1, MV2: Two multivariate to multiply coordinatewise.


Returned Value:

MvarMVStruct *: The product of MV1 * MV2 coordinatewise.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVInvert

Keywords:

product symbolic computation multivariates


MvarMVMultScalar

(mvar_sym.c:265)

Prototype:

  MvarMVStruct *MvarMVMultScalar(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

Given two multivariate - a vector multivariate MV1 and a scalar multivariate MV2, multiply all MV1's coordinates by the scalar multivariate MV2. Returned multivariate is a multivariate representing the product of the two given multivariates.

Parameters:

MV1, MV2: Two multivariates to multiply.


Returned Value:

MvarMVStruct *: A multivariate representing the product of MV1 and MV2.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVMult MvarMVCrossProd MvarCrvMultScalar

Keywords:

product symbolic computation multivariates


MvarMVMultiLinearMV

(mvarprim.c:30)

Prototype:

  MvarMVStruct *MvarMVMultiLinearMV(const IrtRType *Min,
                                    const IrtRType *Max,
                                    int Dim)


Description:

Constructs a mulit-linear multivariates that spans the [Min, Max] ranges in all Dim dimenions.

Parameters:

Min: Minimal values of the expected ranges.
Max: Maximal values of the expected ranges.
Dim: Dimension of expect multivariate.


Returned Value:

MvarMVStruct *: Constructed multi-linear function.


Keywords:




MvarMVNew

(mvar_gen.c:59)

Prototype:

  MvarMVStruct *MvarMVNew(int Dim,
                          MvarGeomType GType,
                          MvarPointType PType,
                          const int *Lengths)


Description:

Allocates the memory required for a new multi-variate.

Parameters:

Dim: Number of dimensions of this multi-variate.
GType: Type of geometry the curve should be - Bspline, Bezier etc.
PType: Type of control points (E2, P3, etc.).
Lengths: Of control mesh in each of the dimensions. Vector of size Dim.


Returned Value:

MvarMVStruct *: An uninitialized freeform multi-variate.


See Also:

MvarMVFree MvarBzrMVNew MvarBspMVNew

Keywords:

multi-variates allocation


MvarMVPrepGradient

(mvar_der.c:227)

Prototype:

  MvarMVGradientStruct *MvarMVPrepGradient(const MvarMVStruct *MV,
                                           CagdBType Orig)


Description:

Builds a gradient for the given scalar multivariate. If the input is rational, returned is a dynamically allocated vector of scalar mulitvariate functions each representing Dm/Dui, i from 1 to Dim. The returned partial derivative are differentiated directly without the quotient rule which must be applied manually. Otherwise, if the input is polynomial, the gradient is returned as one vector function.

Parameters:

MV: Input scalar field to compute its gradient function.
Orig: If orig TRUE and input is polynomial, the original scalar MV is also placed as last, additional, dimension (for faster evaluation of MV and its gradient).


Returned Value:

MvarMVGradientStruct *: The gradient function of the input scalar field.


See Also:

MvarMVDerive MvarMVFreeGradient MvarMVEvalGradient

Keywords:




MvarMVPwrDegreeRaise

(mvarrais.c:549)

Prototype:

  MvarMVStruct *MvarMVPwrDegreeRaise(const MvarMVStruct *MV,
                                     int Dir,
                                     int IncOrder)


Description:

Increase the order of the given power basis multivariate in direction Dir by IncOrder amount. IncOrder amount is at least one.

Parameters:

MV: Multivariate to increase its order in direction Dir.
Dir: Direction to increase the order.
IncOrder: y how much to increase the order, at least one.


Returned Value:

MvarMVStruct *: New multivariate with higher order.


See Also:

MvarMVDegreeRaise MvarMVDegreeRaiseN MvarMVDegreeRaise2

Keywords:




MvarMVRefineAtParams

(mvar_ref.c:41)

Prototype:

  MvarMVStruct *MvarMVRefineAtParams(const MvarMVStruct *MV,
                                     MvarMVDirType Dir,
                                     CagdBType Replace,
                                     CagdRType *t,
                                     int n)


Description:

Given a multi-variate, refines it at the given n knots as defined by the vector t. If Replace is TRUE, the values replace the current knot vector. Returns pointer to refined MV (Note a Bezier multi-variate will be converted into a Bspline multi-variate).

Parameters:

MV: Multi-variate to refine according to t in direction Dir.
Dir: Direction of refinement. Either U or V or W.
Replace: If TRUE t is a knot vector exaclt in the length of the knot vector in direction Dir in MV and t simply replaces than knot vector. If FALSE, the knot vector in direction Dir in MV is refined by adding all the knots in t.
t: Knot vector to refine/replace the knot vector of MV in direction Dir.
n: Length of vector t.


Returned Value:

MvarMVStruct *: The refined multi-variate. Always a Bspline.


Keywords:

multi-variates


MvarMVRegionFromMV

(mvar_aux.c:610)

Prototype:

  MvarMVStruct *MvarMVRegionFromMV(const MvarMVStruct *MV,
                                   CagdRType t1,
                                   CagdRType t2,
                                   MvarMVDirType Dir)


Description:

Given a multi-variate, returns a sub-region of it.

Parameters:

MV: To extract a sub-region from.
t1, t2: Domain to extract from MV, in parametric direction Dir.
Dir: Direction to extract the sub-region. Either U or V or W.


Returned Value:

MvarMVStruct *: A sub-region of MV from t1 to t2 in direction Dir.


Keywords:

multi-variates


MvarMVReverse

(mvar_rev.c:31)

Prototype:

  MvarMVStruct *MvarMVReverse(const MvarMVStruct *MV, int Axis1, int Axis2)


Description:

Reverse the role of the given two axis by flipping them out.

Parameters:

MV: Multi-Variate to reverse.
Axis1, Axis2: Two axis to flip over.


Returned Value:

MvarMVStruct *: Reversed multi-variate.


See Also:

MvarPromoteMVToMV MvarMVShiftAxes

Keywords:

multi-variates


MvarMVRtnlMult

(mvar_sym.c:589)

Prototype:

  MvarMVStruct *MvarMVRtnlMult(const MvarMVStruct *MV1X,
                               const MvarMVStruct *MV1W,
                               const MvarMVStruct *MV2X,
                               const MvarMVStruct *MV2W,
                               CagdBType OperationAdd)


Description:

Given two multivariates - multiply them using the quotient product rule:
 X = X1 W2 +/- X2 W1

All provided multivariates are assumed to be non rational scalar multivariates. Returned is a non rational scalar multivariate (CAGD_PT_E1_TYPE).

Parameters:

MV1X: Numerator of first multivariate.
MV1W: Denominator of first multivariate. Can be NULL.
MV2X: Numerator of second multivariate.
MV2W: Denominator of second multivariate. Can be NULL.
OperationAdd: TRUE for addition, FALSE for subtraction.


Returned Value:

MvarMVStruct *: The result of MV1X MV2W +/- MV2X MV1W.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVScalarScale MvarMVMultScalar MvarMVInvert MvarMVCrossProd2D

Keywords:

product multivariates symbolic computation


MvarMVScalarScale

(mvar_sym.c:223)

Prototype:

  MvarMVStruct *MvarMVScalarScale(const MvarMVStruct *CMV, CagdRType Scale)


Description:

Given a multivariate, scale it by Scale.

Parameters:

CMV: A multivariate to scale by magnitude Scale.
Scale: Scaling factor.


Returned Value:

MvarMVStruct *: A multivariates scaled by Scale compared to MV.


See Also:

MvarMVDotProd MvarMVVecDotProd MvarMVMult MvarMVMultScalar MvarMVInvert MvarMVCrossProd

Keywords:

scaling symbolic computation multivariates


MvarMVSetAllDomains

(mvar_aux.c:383)

Prototype:

  MvarMVStruct *MvarMVSetAllDomains(MvarMVStruct *MV,
                                    CagdRType *Min,
                                    CagdRType *Max,
                                    int InPlace)


Description:

Given a multi-variate, sets its parametric domain in all directions to be between Min and Max. If the MV is a Bezier and the domain requested is not [0, 1], it is coerced to a Bspline first.

Parameters:

MV: Multi variate function to update its domain.
Min: New minimum domains of MV.
Max: New maximum domains of MV.
InPlace: f TRUE, updates domain in place, unless was a Bezier that was converted into a Bspline, in which case the Bezier is released.


Returned Value:

MvarMVStruct *: Same multivariate with the updated domain in dir Axis.


See Also:

varMVDomain MvarMVSetAllDomains MvarParamInDomain MvarParamsInDomain

Keywords:

multi-variates


MvarMVSetDomain

(mvar_aux.c:174)

Prototype:

  MvarMVStruct *MvarMVSetDomain(MvarMVStruct *MV,
                                CagdRType Min,
                                CagdRType Max,
                                int Axis,
                                int InPlace)


Description:

Given a multi-variate, sets its parametric domain in direction Axis to be between Min and Max. If the MV is a Bezier and the domain requested is not [0, 1], it is coerced to a Bspline first.

Parameters:

MV: Multi variate function to update its domain.
Min: New minimum domain in Axis direction of MV.
Max: New maximum domain in Axis direction of MV.
Axis: Axis to set a new domain for.
InPlace: f TRUE, updates domain in place if possible. A Bezier can be converted into a Bspline, in which case the Bezier is released.


Returned Value:

MvarMVStruct *: Same multivariate with the updated domain in dir Axis.


See Also:

varMVDomain MvarMVSetAllDomains MvarParamInDomain MvarParamsInDomain

Keywords:

multi-variates


MvarMVShiftAxes

(mvar_rev.c:102)

Prototype:

  MvarMVStruct *MvarMVShiftAxes(const MvarMVStruct *MV, int Axis)


Description:

Shift the last index in, instead of index Axis. All axes after Axis are shifted forward one location as well.

Parameters:

MV: Multi-Variate to shift axes.
Axis: From where to shift forward until last Axis and put last Axis Here instead.


Returned Value:

MvarMVStruct *: Multi-variate, with shifted axes


See Also:

MvarMVReverse MvarPromoteMVToMV

Keywords:

multi-variates


MvarMVSplitScalar

(mvar_sym.c:752)

Prototype:

  MvarMVStruct **MvarMVSplitScalar(const MvarMVStruct *MV)


Description:

Given a multivariate, splits it to its scalar component multivariates.

Parameters:

MV: Multivariate to split.


Returned Value:

MvarMVStruct **: A static array holding the dynamically allocated MVs. The zero entry would hold the W, or NULL otherwise. The first entry would hold X axis, etc. This vector would have MVAR_MAX_PT_COORD coordinates.


See Also:

MvarMVMergeScalar

Keywords:

split multivariates symbolic computation


MvarMVSub

(mvar_sym.c:79)

Prototype:

  MvarMVStruct *MvarMVSub(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

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

Parameters:

MV1, MV2: Two multivariate to subtract coordinatewise.


Returned Value:

MvarMVStruct *: The difference of MV1 - MV2 coordinatewise.


See Also:

MvarMVAdd MvarMeshAddSub MvarMVMult

Keywords:

subtraction symbolic computation multivariates


MvarMVSubdivAtParam

(mvar_sub.c:42)

Prototype:

  MvarMVStruct *MvarMVSubdivAtParam(const MvarMVStruct *MV,
                                    CagdRType t,
                                    MvarMVDirType Dir)


Description:

Given a multi-variate, subdivides it at parameter value t in direction Dir.

Parameters:

MV: Multi-Variate to subdivide.
t: Parameter to subdivide at.
Dir: Direction of subdivision.


Returned Value:

MvarMVStruct *: A list of two multi-variates, result of the subdivision.


See Also:

MvarBspMVSubdivAtParam MvarBzrMVSubdivAtParam

Keywords:

multi-variates


MvarMVToCrv

(mvareval.c:1029)

Prototype:

  CagdCrvStruct *MvarMVToCrv(const MvarMVStruct *MV)


Description:

Converts a multivariate function into a curve. If the multivariate is of dimension higher than one, the lowest dimension is employed in the conversion.

Parameters:

MV: A multivariate of at least dimension one to convert to a curve.


Returned Value:

CagdCrvStruct *: A curve representation the given multivariate (or its lowest dimension if higher dim.).


Keywords:

multi-variates


MvarMVToSrf

(mvareval.c:1162)

Prototype:

  CagdSrfStruct *MvarMVToSrf(const MvarMVStruct *MV)


Description:

Converts a multivariate function into a surface. If the multivariate is of dimension higher than two, the lowest two dimensions are employed in the conversion.

Parameters:

MV: A multivariate of dimension two or more to convert to a surface.


Returned Value:

CagdSrfStruct *: A surface representation the given multivariate (or its lowest two dimensions if higher dim.).


Keywords:

multi-variates


MvarMVToTV

(mvareval.c:1320)

Prototype:

  TrivTVStruct *MvarMVToTV(const MvarMVStruct *MV)


Description:

Converts a multivariate function into a trivar. If the multivariate is of dimension higher than three, the lowest three dimensions are employed in the conversion.

Parameters:

MV: A multivariate of dimension three or more to convert to a trivar.


Returned Value:

TrivTVStruct *: A trivar representation the given multivariate (or its lowest three dimensions if higher dim.).


Keywords:

multi-variates


MvarMVTransform

(mvar_gen.c:1353)

Prototype:

  void MvarMVTransform(MvarMVStruct *MV, CagdRType *Translate, CagdRType Scale)


Description:

Linearly transforms, in place, given MV as specified by Translate and Scale.

Parameters:

MV: Multi-variate to transform.
Translate: Translation factor. Can be NULl for non.
Scale: Scaling factor.


Returned Value:

void


Keywords:

multi-variates


MvarMVTriTangents

(mvtangnt.c:384)

Prototype:

  MvarPtStruct *MvarMVTriTangents(const MvarMVStruct *CMV1,
                                  const MvarMVStruct *CMV2,
                                  const MvarMVStruct *CMV3,
                                  int Orientation,
                                  CagdRType SubdivTol,
                                  CagdRType NumericTol)


Description:

Computes tri-tangents of freeform bivariate. In other words, compute the tangent plane at three points to the surface(s). Let,
      DMV12 = MV1(u, v) - MV2(r, s)
      DMV13 = MV1(u, v) - MV3(x, y)
      DMV23 = MV2(r, s) - MV3(x, y)

then, computed the simultaneous solution of the following six equations:
  d MV1   d MV1
< ----- x -----, DMV12 > = 0,
    du      dv


  d MV1   d MV1
< ----- x -----, DMV13 > = 0,
    du      dv


  d MV2   d MV2
< ----- x -----, DMV23 > = 0,
    dr      ds
                                                                           *
  d MV2   d MV2
< ----- x -----, DMV12 > = 0,
    dr      ds
                                                                           *
  d MV3   d MV3
< ----- x -----, DMV13 > = 0,
    dx      dy
                                                                           *
  d MV3   d MV3
< ----- x -----, DMV23 > = 0,
    dx      dy


Parameters:

CMV1, CMV2, CMV3: The 3 multivariates to compute the tri-tangents for. If MV2 == MV2 ==NULL, the self tri-tangents of MV1 are computed.
Orientation: 0 for no effect, -1 or +1 for a request to get opposite or similar normal orientation bi tangencies only.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Points on the bi-tangents of the two multivariates.


See Also:

SymbTangentToCrvAtTwoPts MvarMVBiTangents MvarMVBiTangents2

Keywords:

tri-tangent


MvarMVUnivarInter

(mvar_ssi.c:1575)

Prototype:

  MvarPolyStruct *MvarMVUnivarInter(MvarMVStruct **MVs,
                                    CagdRType Step,
                                    CagdRType SubdivTol,
                                    CagdRType NumericTol)


Description:


Computes intersection curve of two surfaces.

Parameters:

MVs: A vector of MV constraints. Should be of size Dim-1 where Dim is the dimension of the domain of MVs.
Step: Stepsize for curve tracing.
SubdivTol: The subdivision tolerance to use.
NumericTol: The numerical tolerance to use.


Returned Value:

MvarPolyStruct *: The list of polylines which approximate the curve. Each polyline corresponds to the topoligacaly isolated component of the curve.


Keywords:




MvarMVVecDotProd

(mvar_sym.c:397)

Prototype:

  MvarMVStruct *MvarMVVecDotProd(const MvarMVStruct *MV, const CagdRType *Vec)


Description:

Given a multivariate and a vector - computes their dot product. Returned multivariate is a scalar multivariate representing the dot product. While typically in R3, the dot product can be computed for any dimension of MV, and Vec should be of the appropriate size.

Parameters:

MV: Multivarients to multiply and compute a dot product for.
Vec: Vector to project MV onto.


Returned Value:

MvarMVStruct *: A scalar multivariate representing the dot product of MV . Vec.


See Also:

MvarMVDotProd MvarMVMult MvarMVScalarScale MvarMVMultScalar MvarMVInvert MvarMVCrossProd

Keywords:

product dot product symbolic computation ltivariates


MvarMVsBisector

(mvbisect.c:31)

Prototype:

  MvarMVStruct *MvarMVsBisector(const MvarMVStruct *MV1, const MvarMVStruct *MV2)


Description:

Compute bisector to two given multivariates.

Parameters:

MV1, MV2: The two multivariates to compute the bisector for.


Returned Value:

MvarMVStruct *: The result bisector.


See Also:

SymbSrfPtBisectorSrf3D SymbCrvPtBisectorSrf3D SymbCrvCrvBisectorSrf3D

Keywords:

bisectors


MvarMVsSame

(mvar_gen.c:1520)

Prototype:

  CagdBType MvarMVsSame(const MvarMVStruct *MV1,
                        const MvarMVStruct *MV2,
                        CagdRType Eps)


Description:

Compare the two multivariates for similarity.

Parameters:

MV1, MV2: The two multivariates to compare.
Eps: Tolerance of equality.


Returned Value:

CagdBType: TRUE if multivariates are the same, FALSE otehrwise.


See Also:

CagdSrfsSame CagdCrvsSame TrivTVsSame

Keywords:




MvarMVsZeros

(mvarzero.c:234)

Prototype:

  MvarPtStruct *MvarMVsZeros(MvarMVStruct **MVs,
                             MvarConstraintType *Constraints,
                             int NumOfMVs,
                             CagdRType SubdivTol,
                             CagdRType NumericTol)


Description:

Computes the simultaneous solution of the given set of NumOfMVs constraints. A constraints can be equality or ineqaulity as prescribed by the Constraints vector. Only equality constraints are employed in the numerical improvment stage. All multivariates are assumed to be scalar and be in the same parametric domain size and dimension.

Parameters:

MVs: Vector of multivariate constraints.
Constraints: Either an equality or an inequality type of constraint.
NumOfMVs: Size of the MVs and Constraints vector.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
NumericTol: Numeric tolerance of the numeric stage. The numeric stage is employed only if IRIT_FABS(NumericTol) < SubdivTol. If NumericTol is negative, points that fail to improve numerically are purged away.


Returned Value:

MvarPtStruct *: List of points on the solution set. Dimension of the points will be the same as the dimensions of all MVs.


See Also:

MvarMVsZerosNormalConeTest MvarMVsZerosDomainReduction MvarMVsZerosVerifier

Keywords:




MvarMVsZerosDomainReduction

(mvarzero.c:131)

Prototype:

  int MvarMVsZerosDomainReduction(int DomainReduction)


Description:

Sets the use (or not) of the domain reduction option - Bezier (and (Bspline) clipping in multivariate subdivisions' zero set solver.

Parameters:

DomainReduction: New setting for the domain reduction option.


Returned Value:

int: Old setting for normal cone testing usage.


See Also:

MvarMVsZeros MvarMVsZerosNormalConeTest MvarMVsZerosGradPreconditioning MvarMVsZerosSetCallBackFunc

Keywords:




MvarMVsZerosGradPreconditioning

(mvarzero.c:104)

Prototype:

  int MvarMVsZerosGradPreconditioning(int GradPreconditioning)


Description:

Sets the use (or not) of gradient preconditiong option - application of and orthogonalization process over the gradients in multivariate subdivisions' zero set solver.

Parameters:

GradPreconditioning: New setting for the gradient orthogonalization.


Returned Value:

int: Old setting of gradient orthogonalization.


See Also:

MvarMVsZeros MvarMVsZerosNormalConeTest MvarMVsZerosDomainReduction MvarMVsZerosSetCallBackFunc

Keywords:




MvarMVsZerosNormalConeTest

(mvarzero.c:76)

Prototype:

  int MvarMVsZerosNormalConeTest(int NormalConeTest)


Description:

Sets the use (or not) of the normal cone tests inside the multivariate subdivisions' zero set solver.

Parameters:

NormalConeTest: New setting for normal cone testing usage.


Returned Value:

int: Old setting for normal cone testing usage.


See Also:

MvarMVsZeros MvarMVsZerosDomainReduction MvarMVsZerosGradPreconditioning MvarMVsZerosSetCallBackFunc

Keywords:




MvarMVsZerosParallelHyperPlaneTest

(mvarzero.c:159)

Prototype:

  int MvarMVsZerosParallelHyperPlaneTest(int ParallelHPlaneTest)


Description:

Sets the use (or not) of the parallel plane termination criteria in multivariate subdivisions' zero set solver.

Parameters:

ParallelHPlaneTest: New setting for the domain reduction option.


Returned Value:

int: Old setting for normal cone testing usage.


See Also:

MvarMVsZeros MvarMVsZerosNormalConeTest MvarMVsZerosGradPreconditioning MvarMVsZerosDomainReduction MvarMVsZerosSetCallBackFunc

Keywords:




MvarMVsZerosSetCallBackFunc

(mvarzero.c:189)

Prototype:

  MvarMVsZerosSubdivCallBackFunc MvarMVsZerosSetCallBackFunc(
                              MvarMVsZerosSubdivCallBackFunc SubdivCallBackFunc)


Description:

Sets the use (or not) of a call back function that is invoked at every node of the subdivision tree process.

Parameters:

SubdivCallBackFunc: Call back function to use in the MV zeros' subdivision stage.


Returned Value:

MvarMVsZerosSubdivCallBackFunc: Old setting.


See Also:

MvarMVsZeros MvarMVsZerosDomainReduction MvarMVsZerosGradPreconditioning MvarMVsZerosNormalConeTest MvarMVsZerosParallelHyperPlaneTest

Keywords:




MvarMVsZerosVerifier

(mvarzero.c:1793)

Prototype:

  void MvarMVsZerosVerifier(MvarMVStruct * const  *MVs,
                            int NumOfZeroMVs,
                            MvarPtStruct *Sols,
                            CagdRType NumerEps)


Description:

A verification function to test the correctness of the solutions. For development/debugging purposes.

Parameters:

MVs: Input constraints.
NumOfZeroMVs: Number of (zero only) constraints.
Sols: Linked lists of solutions found.
NumerEps: Numeric tolerance used in the solution.


Returned Value:

void


See Also:

MvarMVsZeros

Keywords:




MvarMakeMVsCompatible

(mvarcmpt.c:36)

Prototype:

  CagdBType MvarMakeMVsCompatible(MvarMVStruct **MV1,
                                  MvarMVStruct **MV2,
                                  CagdBType SameOrders,
                                  CagdBType SameKVs)


Description:

Given two multi-variates, makes them compatible by: 1. Coercing their point type to be the same. 2. Making them have the same multi-variate type. 3. Raising the degree of the lower one to be the same as the higher. 4. Refining them to a common knot vector (If Bspline and SameOrder). Note 3 is performed if SameOrder TRUE, 4 if SameKV TRUE. Both multi-variates are modified IN PLACE.

Parameters:

MV1, MV2: Two surfaces to be made compatible, in place.
SameOrders: f TRUE, this routine make sure they share the same orders.
SameKVs: If TRUE, this routine make sure they share the same KVs.


Returned Value:

CagdBType: TRUE if successful, FALSE otherwise.


Keywords:

compatibility


MvarMatchPointListIntoPolylines

(mvar_pll.c:397)

Prototype:

  MvarPolyStruct *MvarMatchPointListIntoPolylines(const MvarPtStruct *PtsList,
                                                  IrtRType MaxTol)


Description:

Connect the list of multivariate points into multivariate polylines by connecting the closest multivariate point pairs, until the distances between adjacent multivariate points/polylines is more than MaxTol.

Parameters:

PtsList: Point list to connect into multivariate polylines.
MaxTol: Maximum distance allowed to connect multivariate points.


Returned Value:

MvarPolyStruct *: Connected multivariate polylines, upto MaxTol tolerance.


See Also:

GMMatchPointListIntoPolylines2

Keywords:




MvarMergeBBox

(mvar_aux.c:729)

Prototype:

  void MvarMergeBBox(MvarBBoxStruct *DestBBox, const MvarBBoxStruct *SrcBBox)


Description:

Merges (union) two bounding boxes into one, in place.

Parameters:

DestBBox: One BBox operand as well as the result.
SrcBBox: Second BBox operand.


Returned Value:

void


Keywords:

bbox bounding box


MvarMergeIrtPtType

(mvarcoer.c:155)

Prototype:

  MvarPointType MvarMergeIrtPtType(MvarPointType PType1, MvarPointType PType2)


Description:

Returns a point type which spans the spaces of both two given point types.

Parameters:

PType1, PType2: o point types to find the point type of their union.


Returned Value:

MvarPointType: A point type of the union of the spaces of PType1 and PType2.


Keywords:

coercion


MvarMergeMVMV

(mvar_aux.c:1344)

Prototype:

  MvarMVStruct *MvarMergeMVMV(const MvarMVStruct *CMV1,
                              const MvarMVStruct *CMV2,
                              MvarMVDirType Dir,
                              CagdBType Discont)


Description:

Merges two multivariates in the requested direction Dir. It is assumed that last edge of MV1 is identical to first edge of MV2. It is assumed that both MVs have open end conditions and share the same orders and knot sequences in all axes, but the merged axes which can have different knots.

Parameters:

CMV1: To connect to CMV2's starting boundary at its end.
CMV2: To connect to CMV1's end boundary at its start.
Dir: Direction the merge should take place.
Discont: If TRUE, assumes the merged "edge" is discontinuous.


Returned Value:

MvarMVStruct *: The merged multivariate.


See Also:

CagdMergeSrfSrf

Keywords:

merge multivariate


MvarMeshIndicesFromIndex

(mvar_aux.c:1303)

Prototype:

  int MvarMeshIndicesFromIndex(int Index, const MvarMVStruct *MV, int *Indices)


Description:

Given a linear Index into the vector of control points, compute the indices of the multivariates in all dimensions.

Parameters:

Index: To decompose into the different axes of the multivariate.
MV: Whose indices are for.
Indices: To compute the exact point location in MV -> Points


Returned Value:

int: TRUE if Index in range, false otherwise.


See Also:

MvarGetPointsMeshIndices

Keywords:




MvarMinSpanCirc

(ms_circ.c:570)

Prototype:

  int MvarMinSpanCirc(IPObjectStruct *Objs,
                      CagdRType *Center,
                      CagdRType *Radius,
                      CagdRType SubdivTol,
                      CagdRType NumerTol)


Description:

Minimum spanning circle (MSC) computation of given Objs geometry. Geometry could be freeform C^1 curves.

Parameters:

Objs: The geometry to compute the MSC for as a list object.
Center: Of computed MSC.
Radius: Of computed MSC.
SubdivTol, NumerTol: Of computation.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

MvarMSCircOfThreeCurves MvarMSCircOfThreeCurves MvarMinSpanCirc MVarMSCircCurveInCirc GMMinSpanCirc

Keywords:

minimum spanning circle


MvarMinSpanCone

(mvcones.c:520)

Prototype:

  int MvarMinSpanCone(MvarVecStruct *MVVecs,
                      int VecsNormalized,
                      int NumOfVecs,
                      MvarNormalConeStruct *MVCone)


Description:

Minimum spanning cone (MSC) computation of a set of vectors. Algorithm is based on the Minimum Spanning Circle in Section 4.7 of "Computational Geometry, Algorithms and Applications" by M. de Berg et. al.

Parameters:

MVVecs: The set of vectors to compute their MSC.
VecsNormalized: TRUE if vectors are normalized, FALSE otherwise.
NumOfVecs: Number of vectors in set MVVecs.
MVCone: Returns cone axis and cone cos angle of computed MSC.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanCone

Keywords:




MvarMinSpanConeAvg

(mvcones.c:449)

Prototype:

  int MvarMinSpanConeAvg(MvarVecStruct *MVVecs,
                         int VecsNormalized,
                         int NumOfVecs,
                         MvarNormalConeStruct *MVCone)


Description:

Minimum spanning cone (MSC) computation of a set of vectors. Find a central vector as the average of all given vectors and find the vector with maximal angular distance from it.

Parameters:

MVVecs: The set of vectors to compute their MSC.
VecsNormalized: TRUE if vectors are normalized, FALSE otherwise.
NumOfVecs: Number of vectors in set MVVecs.
MVCone: Returns cone axis and cone cos angle of computed MSC.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanConeAvg

Keywords:




MvarNormalConeCopy

(mvcones.c:355)

Prototype:

  MvarNormalConeStruct *MvarNormalConeCopy(const MvarNormalConeStruct
                                                                     *NormalCone)


Description:

Copy a multivariate normal cone structure.

Parameters:

NormalCone: Normal cone to copy.


Returned Value:

MvarNormalConeStruct *: Copied normal cone.


See Also:

MvarNormalConeNew MvarNormalConeFree

Keywords:




MvarNormalConeFree

(mvcones.c:388)

Prototype:

  void MvarNormalConeFree(MvarNormalConeStruct *NormalCone)


Description:

Free a multivariate normal cone structure.

Parameters:

NormalCone: Normal cone to free.


Returned Value:

void


See Also:

MvarNormalConeNew MvarNormalConeFreeList MvarNormalConeCopy

Keywords:




MvarNormalConeFreeList

(mvcones.c:414)

Prototype:

  void MvarNormalConeFreeList(MvarNormalConeStruct *NormalConeList)


Description:

Deallocates and frees a list of multi-variate cone structures.

Parameters:

NormalConeList: Multi-Variate cone list to free.


Returned Value:

void


See Also:

MvarNormalConeFree MvarNormalConeNew

Keywords:




MvarNormalConeNew

(mvcones.c:324)

Prototype:

  MvarNormalConeStruct *MvarNormalConeNew(int Dim)


Description:

Constructs a multivariate normal cone structure.

Parameters:

Dim: Dimension of the cone.


Returned Value:

MvarNormalConeStruct *: Constructed cone.


See Also:

MvarNormalConeFree MvarNormalConeFreeList MvarNormalConeCopy

Keywords:




MvarParamInDomain

(mvar_aux.c:425)

Prototype:

  CagdBType MvarParamInDomain(const MvarMVStruct *MV,
                              CagdRType t,
                              MvarMVDirType Dir)


Description:

Given a multi-variate and a domain - validate it.

Parameters:

MV: To make sure t is in its Dir domain.
t: Parameter value to verify.
Dir: Direction. Either U or V or W.


Returned Value:

CagdBType: TRUE if in domain, FALSE otherwise.


See Also:

varMVSetDomain MvarMVSetAllDomains MvarParamInDomain

Keywords:

multi-variates


MvarParamsInDomain

(mvar_aux.c:453)

Prototype:

  CagdBType MvarParamsInDomain(const MvarMVStruct *MV, const CagdRType *Params)


Description:

Given a multi-variate and a domain - validate it.

Parameters:

MV: To make sure (u, v, w) is in its domain.
Params: Array of real valued parameters of size Dim to verify if this point is in MV's parametric domain.


Returned Value:

CagdBType: TRUE if in domain, FALSE otherwise.


See Also:

varMVSetDomain MvarMVSetAllDomains MvarParamsInDomain varMVIntersPtOnBndry

Keywords:

multi-variates


MvarPlaneCopy

(mvar_gen.c:1244)

Prototype:

  MvarPlaneStruct *MvarPlaneCopy(const MvarPlaneStruct *Pln)


Description:

Allocates and duplicates all slots of a multi-variate plane structure.

Parameters:

Pln: Multi-Variate plane to duplicate.


Returned Value:

MvarPlaneStruct *: Duplicated multi-variate plane.


Keywords:




MvarPlaneCopyList

(mvar_gen.c:1270)

Prototype:

  MvarPlaneStruct *MvarPlaneCopyList(const MvarPlaneStruct *PlnList)


Description:

Duplicates a list of multi-variate structures.

Parameters:

PlnList: List of multi-variates to duplicate.


Returned Value:

MvarPlaneStruct *: Duplicated list of multi-variates.


Keywords:

multi-variates


MvarPlaneFree

(mvar_gen.c:1302)

Prototype:

  void MvarPlaneFree(MvarPlaneStruct *Pln)


Description:

Deallocates and frees all slots of a multi-variate plane structure.

Parameters:

Pln: Multivariate plane to free.


Returned Value:

void


See Also:

MvarPlaneNew

Keywords:




MvarPlaneFreeList

(mvar_gen.c:1326)

Prototype:

  void MvarPlaneFreeList(MvarPlaneStruct *PlnList)


Description:

Deallocates and frees a list of multi-variate plane structures.

Parameters:

PlnList: Multi-Variate plane list to free.


Returned Value:

void


Keywords:




MvarPlaneNew

(mvar_gen.c:1210)

Prototype:

  MvarPlaneStruct *MvarPlaneNew(int Dim)


Description:

Allocates the memory required for a new multi-variate plane.

Parameters:

Dim: Number of dimensions of this multi-variate.


Returned Value:

MvarPlaneStruct *: An uninitialized freeform multi-variate plane.


See Also:

MvarPlaneFree

Keywords:




MvarPlaneNormalize

(mvcones.c:243)

Prototype:

  int MvarPlaneNormalize(MvarPlaneStruct *Pln)


Description:

Normalize a given multivariate plane's normal direction to a unit length, in place.

Parameters:

Pln: Plane to normalize its normal direction.


Returned Value:

int: TRUE if successful, FALSE if the input is the ZERO vector.


See Also:

MvarVecNormalize

Keywords:




MvarPolyCopy

(mvar_gen.c:765)

Prototype:

  MvarPolyStruct *MvarPolyCopy(const MvarPolyStruct *Poly)


Description:

Allocates and duplicates all slots of a multi-variate polyline structure.

Parameters:

Poly: Multi-Variate polyline to duplicate.


Returned Value:

MvarPolyStruct *: Duplicated multi-variate polyline.


Keywords:




MvarPolyCopyList

(mvar_gen.c:788)

Prototype:

  MvarPolyStruct *MvarPolyCopyList(MvarPolyStruct *PolyList)


Description:

Duplicates a list of multi-variate polyline structures.

Parameters:

PolyList: List of multi-variate polylines to duplicate.


Returned Value:

MvarPolyStruct *: Duplicated list of multi-variate polylines.


Keywords:

multi-variates


MvarPolyFree

(mvar_gen.c:891)

Prototype:

  void MvarPolyFree(MvarPolyStruct *Poly)


Description:

Deallocates and frees all slots of a multi-variate polyline structure.

Parameters:

Poly: Multivariate polyline to free.


Returned Value:

void


See Also:

MvarPolyNew

Keywords:




MvarPolyFreeList

(mvar_gen.c:911)

Prototype:

  void MvarPolyFreeList(MvarPolyStruct *PolyList)


Description:

Deallocates and frees a list of multi-variate polyline structures.

Parameters:

PolyList: Multi-Variate polyline list to free.


Returned Value:

void


Keywords:




MvarPolyMergePolylines

(mvar_pll.c:192)

Prototype:

  MvarPolyStruct *MvarPolyMergePolylines(MvarPolyStruct *Polys, IrtRType Eps)


Description:

Merges separated multivariate polylines into longer ones, in place, as possible. Given a list of multivariate polylines, matches end points and merged as possible multivariate polylines with common end points, in place.

Parameters:

Polys: Multivariate polylines to merge, in place.
Eps: Epslion of similarity to merge multivariate polylines at.


Returned Value:

MvarPolyStruct *: Merged as possible multivariate polylines.


See Also:

GMMergePolylines

Keywords:

merge polyline


MvarPolyNew

(mvar_gen.c:740)

Prototype:

  MvarPolyStruct *MvarPolyNew(MvarPtStruct *Pl)


Description:

Allocates the memory required for a new multi-variate polyline.

Parameters:

Pl: List of points forming the polyline.


Returned Value:

MvarPolyStruct *: A new multi-variate polyline.


See Also:

MvarPolyFree

Keywords:




MvarPolyReverseList

(mvar_gen.c:706)

Prototype:

  MvarPtStruct *MvarPolyReverseList(MvarPtStruct *Pts)


Description:

Reverses a list of multivariate points, in place.

Parameters:

Pts: Multi-Variate point list to reverse.


Returned Value:

MvarPtStruct *: Reversed list of Multi-Variate points, in place.


Keywords:

reverse


MvarPromoteMVToMV

(mvar_rev.c:200)

Prototype:

  MvarMVStruct *MvarPromoteMVToMV(const MvarMVStruct *MV, int Axis)


Description:

Increase by one the dimensionality of the given multivariate, by introducing a new constant (degree zero) axis with one control point in direction Axis.

Parameters:

MV: Multi-Variate to promote.
Axis: Axis of promotion. Between zero and MV -> Dim.


Returned Value:

MvarMVStruct *: Promoted multi-variate.


See Also:

MvarMVShiftAxes MvarMVFromMV MvarPromoteMVToMV2

Keywords:

multi-variates


MvarPromoteMVToMV2

(mvar_rev.c:244)

Prototype:

  MvarMVStruct *MvarPromoteMVToMV2(const MvarMVStruct *MV,
                                   int NewDim,
                                   int StartAxis)


Description:

Increase by the dimensionality of the given multivariate to NewDim, by introducing new constant (degree zero) axes with one control points in all new directions. The Axis of the original MV will be starting at StartAxis.

Parameters:

MV: Multi-Variate to promote.
NewDim: New dimension of the promoted multivariate.
StartAxis: riginal MV would span axes StartAxis to StartAxis+MV->Dim-1.


Returned Value:

MvarMVStruct *: Promoted multi-variate.


See Also:

MvarMVShiftAxes MvarMVFromMV MvarPromoteMVToMV

Keywords:

multi-variates


MvarPtCmpTwoPoints

(mvar_pll.c:267)

Prototype:

  int MvarPtCmpTwoPoints(const MvarPtStruct *P1,
                         const MvarPtStruct *P2,
                         CagdRType Eps)


Description:

A comparison function to examine if the given two points are the same.

Parameters:

P1, P2: Two multivariate points to compare.
Eps: The tolerance of the comparison.


Returned Value:

int: 0 if identical, -1 or +1 if first point is less than/greater than second point, in lexicographic order over dimensions.


See Also:

MvarPtDistTwoPoints MvarPtDistSqrTwoPoints

Keywords:




MvarPtCopy

(mvar_gen.c:601)

Prototype:

  MvarPtStruct *MvarPtCopy(const MvarPtStruct *Pt)


Description:

Allocates and duplicates all slots of a multi-variate point structure.

Parameters:

Pt: Multi-Variate point to duplicate.


Returned Value:

MvarPtStruct *: Duplicated multi-variate point.


Keywords:




MvarPtCopyList

(mvar_gen.c:626)

Prototype:

  MvarPtStruct *MvarPtCopyList(const MvarPtStruct *PtList)


Description:

Duplicates a list of multi-variate point structures.

Parameters:

PtList: List of multi-variate points to duplicate.


Returned Value:

MvarPtStruct *: Duplicated list of multi-variate points.


Keywords:

multi-variates


MvarPtDistSqrTwoPoints

(mvar_pll.c:359)

Prototype:

  CagdRType MvarPtDistSqrTwoPoints(const MvarPtStruct *P1, const MvarPtStruct *P2)


Description:

Compute the Eucildean distance between two multivariate points.

Parameters:

P1, P2: Two points to compute the distance between.


Returned Value:

CagdRType: Distance computed.


See Also:

MvarPtCmpTwoPoints MvarPtDistTwoPoints

Keywords:




MvarPtDistTwoPoints

(mvar_pll.c:299)

Prototype:

  CagdRType MvarPtDistTwoPoints(const MvarPtStruct *P1, const MvarPtStruct *P2)


Description:

Compute the Eucildean distance between two multivariate points.

Parameters:

P1, P2: Two points to compute the distance between.


Returned Value:

CagdRType: Distance computed.


See Also:

MvarPtCmpTwoPoints MvarPtDistSqrTwoPoints

Keywords:




MvarPtFree

(mvar_gen.c:658)

Prototype:

  void MvarPtFree(MvarPtStruct *Pt)


Description:

Deallocates and frees all slots of a multi-variate point structure.

Parameters:

Pt: Multivariate point to free.


Returned Value:

void


See Also:

MvarPtNew

Keywords:




MvarPtFreeList

(mvar_gen.c:682)

Prototype:

  void MvarPtFreeList(MvarPtStruct *PtList)


Description:

Deallocates and frees a list of multi-variate point structures.

Parameters:

PtList: Multi-Variate point list to free.


Returned Value:

void


Keywords:




MvarPtInBetweenPoint

(mvar_pll.c:324)

Prototype:

  MvarPtStruct *MvarPtInBetweenPoint(const MvarPtStruct *Pt1,
                                     const MvarPtStruct *Pt2,
                                     CagdRType t)


Description:

Computes an in-between point (middle if t = 0.5) of given two points.

Parameters:

Pt1, Pt2: Multivariate points.
t: Blending factor, 0 for Pt1, 0.5 for mid pt, 1 for Pt2.


Returned Value:

MvarPtStruct *: The in-between point of Pt1 and Pt2.


See Also:

MvarPtCmpTwoPoints MvarPtDistSqrTwoPoints

Keywords:




MvarPtNew

(mvar_gen.c:512)

Prototype:

  MvarPtStruct *MvarPtNew(int Dim)


Description:

Allocates the memory required for a new multi-variate point.

Parameters:

Dim: Number of dimensions of this multi-variate.


Returned Value:

MvarPtStruct *: An uninitialized multi-variate point.


See Also:

MvarPtFree

Keywords:




MvarPtRealloc

(mvar_gen.c:555)

Prototype:

  MvarPtStruct *MvarPtRealloc(MvarPtStruct *Pt, int NewDim)


Description:

Reallocates the memory that is required for a new dimension of a multi-variate point.

Parameters:

Pt: Multi-Variate point to reallocate. Should not be used after this operation as it might be freed.
NewDim: Number of new dimensions of this multi-variate.


Returned Value:

MvarPtStruct *: A reallocated point of dimension NewDim.


See Also:

MvarPtNew

Keywords:




MvarPtSortListAxis

(mvar_gen.c:845)

Prototype:

  MvarPtStruct *MvarPtSortListAxis(MvarPtStruct *PtList, int Axis)


Description:

Sorts given list of points based on their increasing order in axis Axis. Sorting is done in place.

Parameters:

PtList: List of points to sort.
Axis: Axis to sort along: 1,2,3 for X,Y,Z.


Returned Value:

MvarPtStruct *: Sorted list of points, in place.


Keywords:




MvarPwrMVNew

(mvar_gen.c:240)

Prototype:

  MvarMVStruct *MvarPwrMVNew(int Dim, const int *Lengths, MvarPointType PType)


Description:

Allocates the memory required for a new power basis multi-variate.

Parameters:

Dim: Number of dimensions of this multivariate.
Lengths: Of control mesh in each of the dimensions. Vector of size Dim.
PType: Type of control points (E2, P3, etc.).


Returned Value:

MvarMVStruct *: An uninitialized freeform multi-variate power basis.


See Also:

MvarMVFree MvarMVNew MvarBspMVNew MvarBzrMVNew

Keywords:

multi-variates allocation


MvarSSISubdToInterCrv

(mvar_ssi.c:1305)

Prototype:

  MvarPolyStruct *MvarSSISubdToInterCrv(MvarMVStruct **MVs,
                                        CagdRType Step,
                                        CagdRType SubdivTol,
                                        CagdRType NumericTol,
                                        MvarMVGradientStruct **MVGrads,
                                        MvarSSIAuxStruct *AS,
                                        MvarPtStruct *BoundaryPts)


Description:

Computes the intersection curve of the system of N = Dim - 1 equations with N + 1 uknowns " MVs[i] = 0, i=0,..,N ". If MvarSSINoLoopTest is satisfied and there are only 2 intersection points of MVs with the boundary of the domain, numerical tracing is applied. Otherwise, we subdivide the longest side of the domain.

Parameters:

MVs: The system of N = Dim - 1 equations with N + 1 uknowns MVs[i] = 0, i=0,..,N ".
Step: The stepsize for numerical tracing.
SubdivTol: Subdivision tolerance in MvarMVZeros.
NumericTol: Numerical tolerance.
MVGrads: Precomputed gradients of MVs.
AS: Auxiliary SSI structure that holds auxiliary data.
BoundaryPts: olution points on the boundary of the domain.


Returned Value:

MvarPolyStruct *: The list of polylines that approximate the curve.


Keywords:




MvarSetFatalErrorFunc

(mvar_ftl.c:28)

Prototype:

  MvarSetErrorFuncType MvarSetFatalErrorFunc(MvarSetErrorFuncType ErrorFunc)


Description:

Sets the error function to be used by Mvar_lib.

Parameters:

ErrorFunc: New error function to use.


Returned Value:

MvarSetErrorFuncType: Old error function reference.


Keywords:

error handling


MvarSkel2DInter3Prims

(skel2d.c:173)

Prototype:

  MvarSkel2DInter3PrimsStruct *MvarSkel2DInter3Prims(MvarSkel2DPrimStruct *Prim1,
                                                     MvarSkel2DPrimStruct *Prim2,
                                                     MvarSkel2DPrimStruct *Prim3)


Description:

Computes all points in R2 that are equadistant from the given three primitives. A primitive can be a point, a line, an arc, or a freeform curve. The end points of the line/arc/curve are NOT considered.

Parameters:

Prim1, Prim2, Prim3: The three input primitives to consider.


Returned Value:

MvarSkel2DInter3PrimsStruct *: A linked list of all equadistant points computed, or NULL if none found.


See Also:

MvarSkel2DSetEpsilon MvarSkel2DSetFineness MvarSkel2DSetOuterExtent

Keywords:

skeleton bisector


MvarSkel2DInter3PrimsFree

(skel2d.c:233)

Prototype:

  void MvarSkel2DInter3PrimsFree(MvarSkel2DInter3PrimsStruct *SK2DInt)


Description:

Deallocates and frees all slots of 2d skeleton intersection structure.

Parameters:

SK2DInt: To be deallocated.


Returned Value:

void


Keywords:

free


MvarSkel2DInter3PrimsFreeList

(skel2d.c:252)

Prototype:

  void MvarSkel2DInter3PrimsFreeList(MvarSkel2DInter3PrimsStruct *SK2DIntList)


Description:

Deallocates and frees a 2d skeleton intersection structure list:

Parameters:

SK2DIntList: To be deallocated.


Returned Value:

void


Keywords:

free


MvarSkel2DSetEpsilon

(skel2d.c:61)

Prototype:

  CagdRType MvarSkel2DSetEpsilon(CagdRType NewEps)


Description:

Sets the epsilon of the 2D skeleton computation.

Parameters:

NewEps: New epsilon to use.


Returned Value:

CagdRType: Old epsilon value.


See Also:

Skel2DInter3Primitives

Keywords:

skeleton bisector


MvarSkel2DSetFineNess

(skel2d.c:115)

Prototype:

  CagdRType MvarSkel2DSetFineNess(CagdRType NewFineNess)


Description:

Sets the fineness of the 2D skeleton computation.

Parameters:

NewFineNess: New fineness to use.


Returned Value:

CagdRType: Old fineness value.


See Also:

Skel2DInter3Primitives

Keywords:

skeleton bisector


MvarSkel2DSetMZeroTols

(skel2d.c:88)

Prototype:

  CagdRType MvarSkel2DSetMZeroTols(CagdRType SubdivTol, CagdRType NumerTol)


Description:

Sets the tolerances to be used in this module for he multivariate zero set solver.

Parameters:

SubdivTol, NumerTol: Subdivision and numeric tolerance of mvar solver.


Returned Value:

CagdRType: Old SubdivTol.


See Also:

MvarMVsZeros MvarSkel2DSetEpsilon MvarSkel2DSetFineNess

Keywords:




MvarSkel2DSetOuterExtent

(skel2d.c:142)

Prototype:

  CagdRType MvarSkel2DSetOuterExtent(CagdRType NewOutExtent)


Description:

Sets the outer extent of created (infinite) primitives in the 2D skeleton computation.

Parameters:

NewOutExtent: New outer extent to use.


Returned Value:

CagdRType: Old outer extent value.


See Also:

Skel2DInter3Primitives

Keywords:

skeleton bisector


MvarSrfAccessibility

(mvaccess.c:55)

Prototype:

  MvarPtStruct *MvarSrfAccessibility(const CagdSrfStruct *CPosSrf,
                                     const CagdSrfStruct *COrientSrf,
                                     const CagdSrfStruct *CCheckSrf,
                                     const CagdRType *AccessDir,
                                     CagdRType SubdivTol,
                                     CagdRType NumerTol)


Description:

Derives the visibility domain of PosSrf, when accessed from the direction that is specified by OrientSrf, not gouging into CheckSrf. The boundary of the domain is prescribed by the following set of three constraints:
      F1(u, v, s, t):   = 0
      F2(u, v, s, t):   = 0
      F3(u, v, s, t):   = 0

where O1(u, v), O2(u, v) are two vector fields orthogonal to O(u, v), the orientation field, K(s, t) is the check surface and Nk(s, t) is its normal field, and S(u, v) is the position surface.

Parameters:

CPosSrf: The position surface to examine.
COrientSrf: The orientation field of the access to the position surface. Must be in same function space and PosSrf. If NULL, the normal field of PosSrf is empoloyed.
CCheckSrf: The surface to check gouging against.
AccessDir: Limit on a hemisphere of directions around AccessDir, if not NULL.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumerTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: The boundary of the accessible regions of PosSrf.


Keywords:




MvarSrfAntipodalPoints

(selfintr.c:553)

Prototype:

  MvarPtStruct *MvarSrfAntipodalPoints(const CagdSrfStruct *Srf,
                                       CagdRType SubdivTol,
                                       CagdRType NumericTol)


Description:

Computes antipodal points in the given surface - pairs of points S(u, v) and S(s, t) such that ((u, v) and (s, t) are two independent params of the same srf):
           < S(u, v) - S(s, t), dS(u, v)/du > = 0,
           < S(u, v) - S(s, t), dS(u, v)/dv > = 0,
           < N(s, t), dS(u, v)/du > = 0,
           < N(s, t), dS(u, v)/dv > = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Srf satisfy these equations when (u, v) == (s, t). The key is in adding a fifth inequality constaint of the form
           < N(u, v), N(s, t) > < 0.

Antipodal points must exists if Srf self intersect in a closed loop and hence can help in detecting sefl-intersections. Further, the diameter of Srf could be easily deduced from the antipodal points. Original version of this function was written by Diana Pekerman, Technion, Israel.

Parameters:

Srf: To detect its antipodal points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Antipodal points, as points in E4 (u, v, s, t).


See Also:

MvarCrvAntipodalPoints MvarHFDistAntipodalSrfSrfC1

Keywords:




MvarSrfFlecnodalCrvs

(mvaccess.c:512)

Prototype:

  MvarPtStruct *MvarSrfFlecnodalCrvs(const CagdSrfStruct *CSrf,
                                     CagdRType SubdivTol,
                                     CagdRType NumerTol)


Description:

Computes the flecnodal curves on surface Srf = S(u, v). Denote by Suv the second order derivatives of S(u, v) and by Suvv the third order derivatives. Then, solution of the following 3 equations in 4 unknowns (u, v, a, b) provides the flecnodal curves:
            [ L M ] [ a ]
1. [ a  b ] [     ] [   ] =       (This location/direction is asymp.)
            [ M N ] [ b ]         (L, M, N are the coef. of SFF.)


               [ Suu Suv ]           [ a ]
    = [ a  b ] [         ] . n(u, v) [   ] = 0,
               [ Suv Svv ]           [ b ]

or
   < a^2 Suu + 2ab Suv + b^2 Svv, n(u, v) > = 0.


            (   [ Suuu Suuv ]       [ Svuu Svuv ] )            [ a ]
2. [ a  b ] ( a [           ]  +  b [           ] )  . n(u, v) [   ] = 0,
            (   [ Suuv Suvv ]       [ Svuv Svvv ] )            [ b ]

(A third derivative zero contact.) or
   < a^3 Suuu + 3a^2b Suuv + 3ab^2 Suvv + b^3 Svvv, n(u, v) > = 0.

3. a * a + b * b = 1 (A normalization constraint.)

Parameters:

CSrf: To compute the silhouette higher orders' contact points.
SubdivTol: Accuracy of the subdivision stage of the approximation.
NumerTol: Accuracy of numeric approx.


Returned Value:

MvarPtStruct *: Polylines on the unit sphere, depicting the flecnodal's partitioning lines.


See Also:

SymbSrfGaussCurvature UserSrfTopoAspectGraph SymbEvalSrfAsympDir MvarSrfSilhInflections

Keywords:




MvarSrfFlecnodalPts

(mvaccess.c:724)

Prototype:

  MvarPtStruct *MvarSrfFlecnodalPts(const CagdSrfStruct *CSrf,
                                    CagdRType SubdivTol,
                                    CagdRType NumerTol)


Description:

Computes the flecnodal points on surface Srf = S(u, v). Denote by Suv the second order derivatives of S(u, v) and by Suvv the third order derivatives. Then, solution of the following 4 equations in 4 unknowns (u, v, a, b) provides the flecnodal points:
            [ L M ] [ a ]
1. [ a  b ] [     ] [   ] =       (This location/direction is asymp.)
            [ M N ] [ b ]         (L, M, N are the coef. of SFF.)


               [ Suu Suv ]           [ a ]
    = [ a  b ] [         ] . n(u, v) [   ] = 0,
               [ Suv Svv ]           [ b ]

or
   < a^2 Suu + 2ab Suv + b^2 Svv, n(u, v) > = 0.


            (   [ Suuu Suuv ]       [ Svuu Svuv ] )            [ a ]
2. [ a  b ] ( a [           ]  +  b [           ] )  . n(u, v) [   ] = 0,
            (   [ Suuv Suvv ]       [ Svuv Svvv ] )            [ b ]

(A third derivative zero contact.) or
   < a^3 Suuu + 3a^2b Suuv + 3ab^2 Suvv + b^3 Svvv, n(u, v) > = 0.


3. < a^4 Suuuu + 4 a^3b Suuuv + 6 a^2b^2 suuvv + 4ab^3 suvvv + b^4 Svvvv,
                                                          n(u, v) > = 0.

(A fourth derivative zero contact.)
4. a * a + b * b = 1             (A normalization nconstraint.)


Parameters:

CSrf: To compute the silhouette higher orders' contact points.
SubdivTol: Accuracy of the subdivision stage of the approximation.
NumerTol: Accuracy of numeric approx.


Returned Value:

MvarPtStruct *: Polylines on the unit sphere, depicting the flecnodal's partitioning lines.


See Also:

SymbSrfGaussCurvature UserSrfTopoAspectGraph SymbEvalSrfAsympDir MvarSrfSilhInflections

Keywords:




MvarSrfRadialCurvature

(mv_crvtr.c:56)

Prototype:

  MvarPtStruct *MvarSrfRadialCurvature(const CagdSrfStruct *CSrf,
                                       const CagdVType ViewDir,
                                       CagdRType SubdivTol,
                                       CagdRType NumerTol)


Description:


Computes the radial curvature lines on surface Srf viewed from ViewDir. This amounts to finding the asymptotic directions of Srf that are in also the projection of ViewDir onto the tangent plane. Let a and b be two parameters that prescribe the tanget space. Then, the solution is derived as the solution of the following three equations:
       dS     dS
 < ( a -- + b -- ) x N, V > = 0,  (the tangent direction is the projection
       du     dv                   of V onto the tangent plane.)


            [ L M ] [ a ]
   [ a  b ] [     ] [   ] = 0,    (This location/direction is asymp.)
            [ M N ] [ b ]         (L, M, N are the coef. of SFF.)

where a and b are normalized so
    a^2 + b^2 = 1.


Parameters:

CSrf: To compute the radial curvature lines for.
ViewDir: View direction to consider.
SubdivTol: Accuracy of the subdivision stage of the approximation.
NumerTol: Accuracy of numeric approx.


Returned Value:

MvarPtStruct *: Polylines in the parameter space, depicting the radial curvature lines.


See Also:

SymbSrfGaussCurvature UserSrfTopoAspectGraph SymbEvalSrfAsympDir

Keywords:




MvarSrfSelfInterDiagFactor

(selfintr.c:1440)

Prototype:

  MvarPtStruct *MvarSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
                                           CagdRType SubdivTol,
                                           CagdRType NumericTol)


Description:


Computes self intersection points for a given surface S using the following constraints ((u, v) and (s, t) are two independent params of the same srf):
           x(u, v) - x(s, t) = 0,
           y(u, v) - y(s, t) = 0,
           z(u, v) - z(s, t) = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Crv satisfy these equations when u == v and s == t. The key here is to remove all (u - s) (and possibly (v - t)) factors off diagonal Bezier patches of the above, using a decomposition of the Bezier patches as (u1 - u3) G(u1, u2, u3, u4) + (u2 - u4) H(u1, u2, u3, u4).

Parameters:

Srf: To detect its self intersecting points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.


Returned Value:

MvarPtStruct *: Self intersection points, as points in E4 (u, v, s, t).


See Also:

MvarSrfAntipodalPoints MvarCrvSelfInterNrmlDev MvarCrvSelfInterDiagFactor MvarSrfSelfInterDiagFactor2

Keywords:




MvarSrfSelfInterNrmlDev

(selfintr.c:1068)

Prototype:

  MvarPtStruct *MvarSrfSelfInterNrmlDev(const CagdSrfStruct *Srf,
                                        CagdRType SubdivTol,
                                        CagdRType NumericTol,
                                        CagdRType MinNrmlDeviation)


Description:

Computes self intersection points for given surface using the following constraints (u, v) and (s, t) are two independent params of the same srf:
           x(u, v) - x(s, t) = 0,
           y(u, v) - y(s, t) = 0,
           z(u, v) - z(s, t) = 0.

Direct attempt to solve this set of constraints is bound to be slow as all points in Srf satisfy these equations when (u, v) == (s, t). The key is in adding a fourth inequality constaint of the form
                < N(u, v), N(s, t) >
           ---------------------------- < Cos(Angle),
           || N(u, v) ||  || N(s, t) ||

Where Cos(Angle) is a provided constant that prescribes the minimal angle the surface is expected to intersect at. The closer Cos(Angle) to one the more work this function will have to do in order to isolate the self intersection curve. The above expression is not rational and so, we use a logical or of the following two expressions:
                < N(u, v), N(s, t) >^2
           ------------------------------- < Cos^2(Angle),
           || N(u, v) ||^2 || N(s, t) ||^2

or < N(u, v), N(s, t) > < 0.

Parameters:

Srf: To detect its self intersecting points.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
MinNrmlDeviation: The minimal angle teh surfaces are suppose to intersect at.


Returned Value:

MvarPtStruct *: Self intersection points, as points in E4 (u, v, s, t).


See Also:

MvarSrfAntipodalPoints MvarCrvSelfInterNrmlDev MvarSrfSelfInterDiagFactor

Keywords:




MvarSrfSilhInflections

(mvaccess.c:257)

Prototype:

  MvarPtStruct *MvarSrfSilhInflections(const CagdSrfStruct *Srf,
                                       const CagdVType ViewDir,
                                       CagdRType SubdivTol,
                                       CagdRType NumerTol)


Description:

Computes the silhouette locations on surface Srf viewed from ViewDir that has inflection points or contact for second order or more. This amounts to finding the asymptotic directions of Srf that are in the direction of ViewDir. Let V(s, t) be a parametrization of all possible viewing directions. Solution is derived as the solution of the following three equations:
     dS   dS
   < -- x -- , V > = 0,           (View direction is in the tangent space)
     du   dv


            [ L M ] [ a ]
   [ a  b ] [     ] [   ] = 0,    (This location/direction is asymp.)
            [ M N ] [ b ]         (L, M, N are the coef. of SFF.)

where a and b are the solutions of
     dS     dS
   a -- + b -- = V.
     du     dv


Parameters:

Srf: To compute the silhouette higher orders' contact points.
ViewDir: View direction to consider.
SubdivTol: Accuracy of the subdivision stage of the approximation.
NumerTol: Accuracy of numeric approx.


Returned Value:

MvarPtStruct *: Polylines on the unit sphere, depicting the flecnodal's partitioning lines.


See Also:

SymbSrfGaussCurvature UserSrfTopoAspectGraph SymbEvalSrfAsympDir

Keywords:




MvarSrfSrfBisector

(mvbisect.c:240)

Prototype:

  MvarMVStruct *MvarSrfSrfBisector(const MvarMVStruct *CMV1,
                                   const MvarMVStruct *CMV2)


Description:


Computes the bisectors of two surfaces in R^5.

Parameters:

CMV1, CMV2: he two bivariates (surfaces) in R^5.


Returned Value:

MvarMVStruct *: The resulting bisector.


See Also:

MvarMVsBisector MvarCrvSrfBisector MvarSrfSrfBisectorApprox

Keywords:

bisectors


MvarSrfSrfBisectorApprox

(mvbisect.c:674)

Prototype:

  VoidPtr MvarSrfSrfBisectorApprox(const MvarMVStruct *CMV1,
                                   const MvarMVStruct *CMV2,
                                   int OutputType,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol)


Description:

Computes an approximation to the bisector of two surfaces. Let S1(u, v) and S2(r, s) be two parametric surfaces and let n1(u, v) and n2(r, s) be their unnormalized normal fields. Becuase the two normals of the two surfaces must be coplanar we introduce the following constraint, forcing the three vectors n1, n2, and S1 - S2 to all be in the same plane.
 < ( S1(u, v) - S2(r, s) ) x n1(u, v), n2(r, s) > = 0.

To make sure the distance to the intersection point of the normals, from both surface's foot points we also coerces these three vectors to form a isosceles triangle:
 || n2(r, s) ||^2 < S1(u, v) - S2(r, s), n1(u, v) > ^ 2 -
                || n1(r, s) ||^2 < S1(u, v) - S2(r, s), n2(u, v) > ^ 2

Finding the zero set of the last equation provides the correspondance between the (u, v) location and the first surface and (r, s) locations on the second surface that serve as mutual foot point for some bisector point.

Parameters:

CMV1, CMV2: he two bivariates (surfaces) in R^3.
OutputType: xpected output type: 1. For the computed multivariate constraints. 2. For the computed point cloud on the bisector. 3. Points in a form of (u1, v2, x, y, z) where (u1, v1) are the parameter space of the first surface.
SubdivTol: Tolerance of the first zero set finding subdivision stage.
NumericTol: olerance of the second zero set finding numeric stage.


Returned Value:

VoidPtr: Following OutputType, either a set of multivariates (as a linked list of MvarMVStruct), or a cloud of points on the bisector (as a linked list of MvarPtStruct).


See Also:

MvarMVsBisector MvarCrvSrfBisector MvarSrfSrfBisector MvarCrvSrfBisectorApprox

Keywords:

bisectors


MvarSrfSrfContact

(mvarintr.c:811)

Prototype:

  MvarPtStruct *MvarSrfSrfContact(const CagdSrfStruct *Srf1,
                                  const CagdSrfStruct *Srf2,
                                  const CagdCrvStruct *MotionSrf1,
                                  const CagdCrvStruct *ScaleSrf1,
                                  CagdRType SubdivTol,
                                  CagdRType NumericTol,
                                  CagdBType UseExprTree)


Description:

Computes the contact locations of two C^1 surfaces in R^3, possibly with multivariate expression trees. Expression trees could be beneficial comptationally when the geometry is complex (i.e. dozens of control points or more, in each directions).

Parameters:

Srf1, Srf2: Two surface to compute contacts over time in R^3.
MotionSrf1: The motion over time Srf1 undergoes. Can be NULL.
ScaleSrf1: The scale over time Srf1 undergoes. Can either be a scalar function, or vector function in R^3. Can be NULL. If both MotionSrf1 and Srf1Scale are defined, they better share their domains.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: List of intersection points, as parameter pairs into the two surfaces domains.


See Also:

MvarCrvCrvInter MvarSrfSrfInter MvarSrfSrfSrfInter

Keywords:




MvarSrfSrfInter

(mvarintr.c:296)

Prototype:

  MvarPtStruct *MvarSrfSrfInter(const CagdSrfStruct *Srf1,
                                const CagdSrfStruct *Srf2,
                                CagdRType SubdivTol,
                                CagdRType NumericTol,
                                CagdBType UseExprTree)


Description:

Computes the intersection locations of two surfaces in R^3, possibly with multivariate expression trees. Expression trees could be beneficial comptationally when the geometry is complex (i.e. dozens of control points or more, in each directions).

Parameters:

Srf1, Srf2: Two surface to intersect in R^3.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: List of intersection points, as parameter pairs into the two surfaces domains.


See Also:

MvarCrvCrvInter MvarSrfSrfSrfInter MvarSrfSrfContact

Keywords:




MvarSrfSrfInter2

(mvar_ssi.c:1630)

Prototype:

  MvarPolyStruct *MvarSrfSrfInter2(CagdSrfStruct *Srf1,
                                   CagdSrfStruct *Srf2,
                                   CagdRType Step,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol)


Description:

Computes intersection curve ot two surfaces.

Parameters:

Srf1, Srf2: Cagd surfaces to be intersected.
Step: Stepsize for curve tracing.
SubdivTol: The subdivision tolerance to use.
NumericTol: The numerical tolerance to use.


Returned Value:

MvarPolyStruct *: The list of polylines which approximate the curve. Each polyline corresponds to the topoligacaly isolated component of the curve.


Keywords:




MvarSrfSrfMinimalDist

(hasdrf3d.c:986)

Prototype:

  MvarPtStruct *MvarSrfSrfMinimalDist(const CagdSrfStruct *Srf1,
                                      const CagdSrfStruct *Srf2,
                                      CagdRType *MinDist)


Description:

Computes the minimal distance between two given C1 surfaces. Surfaces are assumed to not intersect. This minimal distance can occur: 1. At end points vs. end points. 2. At the end points vs interior locations. 3. At a boundary curve vs the other surface. 4. At antipodal interior locations.

Parameters:

Srf1: To detect its minimal distance to Srf2.
Srf2: To detect its minimal distance to Srf1.
MinDist: Upon return, is set to the minimal distance detected.


Returned Value:

MvarPtStruct *: Pairs of parameters at the minimal distance.


See Also:

MvarSrfSrfAntipodalPoints SymbDistSrfPoint MvarCrvSrfMinimalDist

Keywords:




MvarSrfSrfSrfInter

(mvarintr.c:518)

Prototype:

  MvarPtStruct *MvarSrfSrfSrfInter(const CagdSrfStruct *Srf1,
                                   const CagdSrfStruct *Srf2,
                                   const CagdSrfStruct *Srf3,
                                   CagdRType SubdivTol,
                                   CagdRType NumericTol,
                                   CagdBType UseExprTree)


Description:

Computes the intersection locations of three surfaces in R^3, possibly with multivariate expression trees. Expression trees could be beneficial comptationally when the geometry is complex (i.e. dozens of control points or more, in each directions).

Parameters:

Srf1, Srf2, Srf3: hree surface to intersect in R^3.
SubdivTol: Tolerance of the solution. This tolerance is measured in the parametric space of the surfaces.
NumericTol: Numeric tolerance of a possible numeric improvment stage. The numeric stage is employed if NumericTol < SubdivTol.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: List of intersection points, as parameter pairs into the three surfaces domains.


See Also:

MvarCrvCrvInter MvarSrfSrfInter MvarSrfSrfContact

Keywords:




MvarSrfToMV

(mvareval.c:1088)

Prototype:

  MvarMVStruct *MvarSrfToMV(const CagdSrfStruct *Srf)


Description:

Converts a surface into a multivariate function.

Parameters:

Srf: Surface to convert into the multi-variate MV.


Returned Value:

MvarMVStruct *: A multi variate function representation to Srf.


Keywords:

multi-variates


MvarSrfTrimGlblOffsetSelfInter

(offset2.c:284)

Prototype:

  IPObjectStruct *MvarSrfTrimGlblOffsetSelfInter(CagdSrfStruct *Srf,
                                                 const CagdSrfStruct *OffSrf,
                                                 CagdRType TrimAmount,
                                                 int Validate,
                                                 int Euclidean,
                                                 CagdRType SubdivTol,
                                                 CagdRType NumerTol,
                                                 CagdBType NumerImp)


Description:

trims regions in the offset surface OffSrf that are closer than TrimAmount to original Srf. TrimAmount should be a fraction smaller than the offset amount itself. See also: Joon-Kyung Seong, Gershon Elber, and Myung-Soo Kim. ``Trimming Local and Global Self-intersections in Offset Curves and Surfaces using Distance Maps.'' Computer Aided Design, Vol 38, No 3, pp 183-193, March 2006.

Parameters:

Srf: Original surface.
OffSrf: The offset surface approximation.
TrimAmount: The trimming distance. A fraction smaller than the offset amount.
Validate: If TRUE, compute only points along the self intersections that are valid and serve to delineate between valid and invalid (to be purged) offset surface regions.
Euclidean: If TRUE, returned data is in the Euclidean space of OffSrf. FALSE for parametric space of OffSrf.
SubdivTol: Accuracy of computation.
NumerTol: If smaller that SubdivTol, a numerical improvment stage is applied by the solver.
NumerImp: If TRUE, a final stage of numerical marching over the surface is applied to improve the solution even further.


Returned Value:

IPObjectStruct *: A list of self inter. curves, on the offset surface.


Keywords:




MvarSrfTrimGlblOffsetSelfInterNI

(offst2ni.c:106)

Prototype:

  IPObjectStruct *MvarSrfTrimGlblOffsetSelfInterNI(IPPolygonStruct *Plls,
                                                   const CagdSrfStruct *OffSrf,
                                                   CagdRType SubdivTol,
                                                   CagdRType NumerTol,
                                                   int Euclidean,
                                                   CagdRType SameUVTol)


Description:

Improve self-intersection curves of offset surfaces using numerical methods.

Parameters:

Plls: Connected list of polylines to be improved.
OffSrf: The offset surface approximation.
SubdivTol: Accuracy of computation.
NumerTol: NumerTol tolerance.
Euclidean: If TRUE, returned data is in the Euclidean space of OffSrf. FALSE for parametric space of OffSrf.
SameUVTol: Tolerance for termination condition around singular points.


Returned Value:

IPObjectStruct *: A list of self inter. curves, on the offset surface.


Keywords:




MvarTVToMV

(mvareval.c:1235)

Prototype:

  MvarMVStruct *MvarTVToMV(const TrivTVStruct *TV)


Description:

Converts a trivar into a multivariate function.

Parameters:

TV: Trivar to convert into the multi-variate MV.


Returned Value:

MvarMVStruct *: A multi variate function representation to TV.


Keywords:

multi-variates


MvarTanHyperSpheresofNManifolds

(ms_sphr.c:48)

Prototype:

  MvarPtStruct *MvarTanHyperSpheresofNManifolds(MvarMVStruct **MVs,
                                                int NumOfMVs,
                                                CagdRType SubdivTol,
                                                CagdRType NumericTol,
                                                CagdBType UseExprTree)


Description:

Computes all the hyper-spheres that are tangent to all the given set of manifolds. All manifolds should share the same range space, R^d, space in which the hyper-spheres are sought.

Parameters:

MVs: The manifolds to consider in R^d.
NumOfMVs: Number of multivariates we need to process.
SubdivTol, NumericTol: Of computation.
UseExprTree: TRUE to use expression trees in the computation, FALSE to use regular multivariate expressions.


Returned Value:

MvarPtStruct *: List of tangent hyper-spheres, NULL if error.


See Also:

MvarMSCircOfThreeCurves MvarMSCircOfTwoCurves MvarMinSpanCirc MvarTanHyperSpheresofNManifoldsET

Keywords:




MvarTwoMVsMorphing

(mvarmrph.c:37)

Prototype:

  MvarMVStruct *MvarTwoMVsMorphing(const MvarMVStruct *MV1,
                                   const MvarMVStruct *MV2,
                                   CagdRType Blend)


Description:

Given two compatible multi-variates (See function MvarMakeMVsCompatible), computes a convex blend between them according to Blend which must be between zero and one. Returned is the new blended multi-variates.

Parameters:

MV1, MV2: The two multi-variates to blend.
Blend: A parameter between zero and one.


Returned Value:

MvarMVStruct *: MV2 * Blend + MV1 * (1 - Blend).


See Also:

SymbTwoCrvsMorphing SymbTwoCrvsMorphingCornerCut SymbTwoCrvsMorphingMultiRes SymbTwoSrfsMorphing TrivTwoTVsMorphing MvarMakeMVsCompatible

Keywords:

morphing


MvarUniFuncsComputeLowerEnvelope

(mvlowenv.c:1155)

Prototype:

  void MvarUniFuncsComputeLowerEnvelope(CagdCrvStruct *InputCurves,
                                        CagdCrvStruct **LowerEnvelope)


Description:

Given monotone univariate function curves, and their domain, compute the lower envelope. This is the main calling function for such curves.

Parameters:

InputCurves: A CagdCrvStruct of univariate (non-rational) curves in R^1
LowerEnvelope: CagdCrvStruct of lower envelope


Returned Value:

void


Keywords:




MvarUpdateConstDegDomains

(mvar_aux.c:499)

Prototype:

  void MvarUpdateConstDegDomains(MvarMVStruct **MVs, int NumOfMVs)


Description:

Given a vector of MVs, some with constant degrees and invalid domain, update all MVs domains, exploiting MVs with non constant degrees' domains.

Parameters:

MVs: To update their domains.
NumOfMVs: Size of MVs vector.


Returned Value:

void


Keywords:




MvarVecAdd

(mvcones.c:46)

Prototype:

  void MvarVecAdd(MvarVecStruct *VRes,
                  const MvarVecStruct *V1,
                  const MvarVecStruct *V2)


Description:

Add two multivariate vectors.

Parameters:

VRes: Result. Can be one of V1 or V2.
V1, V2: Two input vectors.


Returned Value:

void


See Also:

MvarVecDotProd MvarVecSqrLength MvarVecLength MvarVecScale MvarVecNormalize MvarVecBlend

Keywords:




MvarVecArrayFree

(mvar_gen.c:1153)

Prototype:

  void MvarVecArrayFree(MvarVecStruct *MVVecArray, int Size)


Description:

Deallocates and frees a multi-variate vector array.

Parameters:

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


Returned Value:

void


See Also:

MvarVecArrayNew MvarVecFree MvarVecNew MvarVecFreeList

Keywords:

free


MvarVecArrayNew

(mvar_gen.c:976)

Prototype:

  MvarVecStruct *MvarVecArrayNew(int Size, int Dim)


Description:

Allocates the memory required for a new multi-variate vector array.

Parameters:

Size: Size of multi-variate vector array to allocate.
Dim: Number of dimensions of this multi-variate.


Returned Value:

MvarVecStruct *: An uninitialized multi-variate vector array.


See Also:

MvarVecArrayFree MvarVecFree MvarVecNew

Keywords:




MvarVecBlend

(mvcones.c:182)

Prototype:

  void MvarVecBlend(MvarVecStruct *VRes,
                    const MvarVecStruct *V1,
                    const MvarVecStruct *V2,
                    CagdRType t)


Description:

Compute the blend of the to given multivariate vectors as
      V1 * t + V2 * (1-t).


Parameters:

VRes: Result. Can be one of V1 or V2.
V1, V2: Two input vectors to blend.
t: Blending factor.


Returned Value:

void


See Also:

MvarVecAdd MvarVecSqrLength MvarVecLength MvarVecScale MvarVecNormalize MvarVecDotProd

Keywords:




MvarVecCopy

(mvar_gen.c:1068)

Prototype:

  MvarVecStruct *MvarVecCopy(const MvarVecStruct *Vec)


Description:


Allocates and duplicates all slots of a multi-variate vector structure.

Parameters:

Vec: Multi-Variate vector to duplicate.


Returned Value:

MvarVecStruct *: Duplicated multi-variate vector.


Keywords:




MvarVecCopyList

(mvar_gen.c:1093)

Prototype:

  MvarVecStruct *MvarVecCopyList(const MvarVecStruct *VecList)


Description:

Duplicates a list of multi-variate structures.

Parameters:

VecList: List of multi-variates to duplicate.


Returned Value:

MvarVecStruct *: Duplicated list of multi-variates.


Keywords:

multi-variates


MvarVecDotProd

(mvcones.c:73)

Prototype:

  CagdRType MvarVecDotProd(const MvarVecStruct *V1, const MvarVecStruct *V2)


Description:

Compute the dot product of two multivariate vectors.

Parameters:

V1, V2: Two input vectors.


Returned Value:

CagdRType: The dot product.


See Also:

MvarVecAdd MvarVecSqrLength MvarVecLength MvarVecScale MvarVecNormalize MvarVecBlend

Keywords:




MvarVecFree

(mvar_gen.c:1125)

Prototype:

  void MvarVecFree(MvarVecStruct *Vec)


Description:

Deallocates and frees all slots of a multi-variate vector structure.

Parameters:

Vec: Multivariate vector to free.


Returned Value:

void


See Also:

MvarVecArrayNew MvarVecArrayFree MvarVecNew MvarVecFreeList

Keywords:




MvarVecFreeList

(mvar_gen.c:1183)

Prototype:

  void MvarVecFreeList(MvarVecStruct *VecList)


Description:

Deallocates and frees a list of multi-variate vector structures.

Parameters:

VecList: Multi-Variate vector list to free.


Returned Value:

void


See Also:

MvarVecArrayNew MvarVecArrayFree MvarVecNew MvarVecFree

Keywords:




MvarVecLength

(mvcones.c:126)

Prototype:

  CagdRType MvarVecLength(const MvarVecStruct *V)


Description:

Compute the length of a multivariate vector.

Parameters:

V: Vector to compute its length.


Returned Value:

CagdRType: Computed length.


See Also:

MvarVecAdd MvarVecDotProd MvarVecSqrLength MvarVecScale MvarVecNormalize MvarVecBlend

Keywords:




MvarVecNew

(mvar_gen.c:938)

Prototype:

  MvarVecStruct *MvarVecNew(int Dim)


Description:

Allocates the memory required for a new multi-variate vector.

Parameters:

Dim: Number of dimensions of this multi-variate.


Returned Value:

MvarVecStruct *: An uninitialized multi-variate vector.


See Also:

MvarVecArrayNew MvarVecFree

Keywords:




MvarVecNormalize

(mvcones.c:211)

Prototype:

  int MvarVecNormalize(MvarVecStruct *V)


Description:

Normalize a given multivariate vector to a unit length, in place.

Parameters:

V: Vector to normalize.


Returned Value:

int: TRUE if successful, FALSE if the input is the ZERO vector.


See Also:

MvarVecAdd MvarVecDotProd MvarVecSqrLength MvarVecLength MvarVecScale

Keywords:




MvarVecRealloc

(mvar_gen.c:1022)

Prototype:

  MvarVecStruct *MvarVecRealloc(MvarVecStruct *Vec, int NewDim)


Description:

Reallocates the memory that is required for a new dimension of a multi-variate vector.

Parameters:

Vec: Multi-Variate vector to reallocate. Should not be used after this operation as it might be freed.
NewDim: Number of new dimensions of this multi-variate vector.


Returned Value:

MvarVecStruct *: A reallocated multi-variate vector.


See Also:

MvarVecNew

Keywords:




MvarVecScale

(mvcones.c:149)

Prototype:

  MvarVecStruct *MvarVecScale(MvarVecStruct *V, CagdRType ScaleFactor)


Description:

Scale a given multivariate vector V by a scaling factor ScaleFactor.

Parameters:

V: Vector to scale, in place.
ScaleFactor: Scaling factor to use.


Returned Value:

MvarVecStruct *: The input vector, scaled.


See Also:

MvarVecAdd MvarVecDotProd MvarVecSqrLength MvarVecLength MvarVecNormalize MvarVecBlend

Keywords:




MvarVecSqrLength

(mvcones.c:104)

Prototype:

  CagdRType MvarVecSqrLength(const MvarVecStruct *V)


Description:

Compute the length squared of a multivariate vector.

Parameters:

V: Vector to compute its length.


Returned Value:

CagdRType: Computed length squared.


See Also:

MvarVecAdd MvarVecDotProd MvarVecLength MvarVecScale MvarVecNormalize MvarVecBlend

Keywords:




MvarVoronoiCrvCopy

(mvvorcrv.c:57)

Prototype:

  MvarVoronoiCrvStruct *MvarVoronoiCrvCopy(MvarVoronoiCrvStruct *Crv)


Description:

Allocates and copies all slots of a MvarVoronoiCrvStruct structure.

Parameters:

Crv: To be copied.


Returned Value:

MvarVoronoiCrvStruct *: A duplicate of Crv.


Keywords:

copy


MvarVoronoiCrvFree

(mvvorcrv.c:97)

Prototype:

  void MvarVoronoiCrvFree(MvarVoronoiCrvStruct *Crv)


Description:

Deallocates a VoronoiCrv structure.

Parameters:

Crv: Voronoi curve structure to free.


Returned Value:

void


Keywords:

allocation


MvarVoronoiCrvFreeList

(mvvorcrv.c:121)

Prototype:

  void MvarVoronoiCrvFreeList(MvarVoronoiCrvStruct *CrvList)


Description:

Deallocates a VoronoiCrv list structure.

Parameters:

CrvList: Voronoi curve list to free.


Returned Value:

void


Keywords:

allocation


MvarVoronoiCrvNew

(mvvorcrv.c:28)

Prototype:

  MvarVoronoiCrvStruct *MvarVoronoiCrvNew(void)


Description:

Allocates and resets all slots of a MvarVoronoiCrvStruct structure.

Parameters:

None


Returned Value:

MvarVoronoiCrvStruct *: A VoronoiCrv structure.


Keywords:

allocation


MvarVoronoiCrvReverse

(mvvorcrv.c:145)

Prototype:

  MvarVoronoiCrvStruct *MvarVoronoiCrvReverse(MvarVoronoiCrvStruct *Crv)


Description:

Reverses the t and r parameters of an MvarVoronoiCrvStruct structure.

Parameters:

Crv: To be reversed.


Returned Value:

MvarVoronoiCrvStruct *: A single duplicate of Crv that is reversed.


Keywords:




MvarZeroFilterIdenticalSet

(mvarzero.c:584)

Prototype:

  MvarPtStruct *MvarZeroFilterIdenticalSet(MvarPtStruct *ZeroSet,
                                           MvarMVStruct * const *MVs,
                                           const MvarConstraintType *Constraints,
                                           int NumOfMVs,
                                           int NumOfZeroMVs,
                                           CagdRType Tol)


Description:

Filters out identical points or points that fail the inequality constraints.

Parameters:

ZeroSet: The solution points to filter out.
MVs: Vector of multivariate constraints.
Constraints: Either an equality or an inequality type of constraint.
NumOfMVs: Size of the MVs and Constraints vector.
NumOfZeroMVs: umber of zero set constraints (first in above vectors).
Tol: Tolerance to consider to points same in L^1 norm.


Returned Value:

MvarPtStruct *: Filtered solution points.


See Also:



Keywords:




MvarZeroGenPtMidMvar

(mvarzero.c:638)

Prototype:

  MvarPtStruct *MvarZeroGenPtMidMvar(const MvarMVStruct *MV, int SingleSol)


Description:

Construct a point of the dimension as the given MV in the middle of its parametric domain.

Parameters:

MV: To consurct a point in the middle of its domain.
SingleSol: If TRUE, this point is a single solution it MV domain.


Returned Value:

MvarPtStruct *: The construct point in the middle of MV.


See Also:

MvarMVsZeros

Keywords:




MvarZeroMVsSubdiv

(mvarzero.c:1441)

Prototype:

  MvarPtStruct *MvarZeroMVsSubdiv(MvarMVStruct **MVs,
                                  MvarConstraintType *Constraints,
                                  int NumOfMVs,
                                  int NumOfZeroMVs,
                                  int ApplyNormalConeTest,
                                  CagdRType SubdivTol,
                                  int Depth)


Description:

Approximate a solution to the set of constraints, if any, using the subdivision of the parametric domains of the MVs. Stops when the parametric domain is smaller than SubdivTol in all dimensions and returns a central point to that small multivariate patch.

Parameters:

MVs: Vector of multivariate constraints.
Constraints: Either an equality or an inequality type of constraint.
NumOfMVs: Size of the MVs and Constraints vector.
NumOfZeroMVs: umber of zero or equality constraints.
ApplyNormalConeTest: TRUE to apply normal cones' single intersection tests.
SubdivTol: Tolerance of the subdivision process. Tolerance is measured in the parametric space of the multivariates.
Depth: Of subdivision recursion.


Returned Value:

MvarPtStruct *: List of points on the solution set. Dimension of the points will be the same as the dimensions of all MVs.


See Also:

MvarMVsZeros

Keywords:




_MvarIncBoundMeshIndices

(mvar_aux.c:1152)

Prototype:

  int _MvarIncBoundMeshIndices(const MvarMVStruct *MV,
                               int *Indices,
                               int *LowerBound,
                               int *UpperBound,
                               int *Index)


Description:

Increment the index of the control mesh of the multivariate function by one, with given lower and upper bounds: LowerBound <= Idx < UpperBound. Should only be called via the macro MVAR_INC_BOUND_MESH_INDICES.

Parameters:

MV: To increment Indices to its control mesh.
Indices: To increment one step.
LowerBound: inimal values to assume.
UpperBound: ne above the maximal values to assume.
Index: Index to increment.


Returned Value:

int: TRUE if Indices are in domain, FALSE if done.


See Also:

_MvarIncSkipMeshIndices _MvarIncSkipMeshIndices1st _MvarIncrementMeshIndices _MvarIncrementMeshOrderIndices

Keywords:




_MvarIncSkipMeshIndices

(mvar_aux.c:1078)

Prototype:

  int _MvarIncSkipMeshIndices(const MvarMVStruct *MV,
                              int *Indices,
                              int Dir,
                              int *Index)


Description:

Increment the index of the control mesh of the multivariate function by one, skipping axis Dir. Should only be called via the macro MVAR_INC_SKIP_MESH_INDICES.

Parameters:

MV: To increment Indices to its control mesh.
Indices: To increment one step.
Dir: To skip in the incrementation.
Index: The total current index to be incremented as well, or zero if we wrapped around all incides.


Returned Value:

int: Current non negative Index if Indices are in domain, zero (FALSE) if done - out of the domain.


See Also:

_MvarIncBoundMeshIndices _MvarIncSkipMeshIndices1st _MvarIncrementMeshIndices _MvarIncrementMeshOrderIndices

Keywords:




_MvarIncSkipMeshIndices1st

(mvar_aux.c:1034)

Prototype:

  int _MvarIncSkipMeshIndices1st(const MvarMVStruct *MV, int *Indices)


Description:

Increment the index of the control mesh of the multivariate function by one, skipping axis Dir zero. Should only be called via the macro MVAR_INC_SKIP_MESH_INDICES_1ST.

Parameters:

MV: To increment Indices to its control mesh.
Indices: To increment one step.


Returned Value:

int: TRUE if Indices are in domain, FALSE if done.


See Also:

_MvarIncSkipMeshIndices _MvarIncBoundMeshIndices _MvarIncrementMeshIndices _MvarIncrementMeshOrderIndices

Keywords:




_MvarIncrementMeshIndices

(mvar_aux.c:951)

Prototype:

  int _MvarIncrementMeshIndices(const MvarMVStruct *MV, int *Indices, int *Index)


Description:

Increment the index of the control mesh of the multivariate function by one. Should only be called via the macro MVAR_INCREMENT_MESH_INDICES.

Parameters:

MV: To increment Indices to its control mesh.
Indices: To increment one step.
Index: The total current index to be incremented as well, or zero if we wrapped around all incides.


Returned Value:

int: The non zero advanced index if indices are in domain, zero if done (out of domain).


See Also:

_MvarIncSkipMeshIndices _MvarIncBoundMeshIndices _MvarIncSkipMeshIndices1st _MvarIncrementMeshOrderIndices

Keywords:




_MvarIncrementMeshOrderIndices

(mvar_aux.c:994)

Prototype:

  int _MvarIncrementMeshOrderIndices(const MvarMVStruct *MV,
                                     int *Indices,
                                     int *Index)


Description:

Increment the index of the control mesh of the multivariate function by one. Should only be called via the macro MVAR_INCREMENT_MESH_ORDER_INDICES. This macro is useful when traversing a Bspline mesh for evaluation, Orders[i] control points in i'th dimension.

Parameters:

MV: To increment Indices to its control mesh.
Indices: To increment one step.
Index: The total current index to be incremented as well, or zero if we wrapped around all incides.


Returned Value:

int: The non zero advanced index if indices are in domain, zero if done (out of domain).


See Also:

_MvarIncSkipMeshIndices _MvarIncBoundMeshIndices _MvarIncSkipMeshIndices1st

Keywords: