GM2BiTansFromCircCirc

(geom_bsc.c:3040)

Prototype:

  int GM2BiTansFromCircCirc(const IrtPtType Center1,
                            IrtRType Radius1,
                            const IrtPtType Center2,
                            IrtRType Radius2,
                            int OuterTans,
                            IrtPtType TanPts[2][2])


Description:

Finds the two pairs of tangent points of the given two planar circles.

Parameters:

Center1, Radius1: Geometry of first circle.
Center2, Radius2: Geometry of second circle.
OuterTans: TRUE for outer two tangents, FALSE for inner two.
TanPts: The two tangents designated by the end points of the Segments.


Returned Value:

int: TRUE for successful computation, FALSE for failure or no such bitangents exist for the current configuration.


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc3D GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2PointsFromCircCirc GM2TanLinesFromCircCirc GM2IsPtInsideCirc

Keywords:

circle circle tangenties


GM2PointsFromCircCirc

(geom_bsc.c:2617)

Prototype:

  int GM2PointsFromCircCirc(const IrtPtType Center1,
                            IrtRType Radius1,
                            const IrtPtType Center2,
                            IrtRType Radius2,
                            IrtPtType Inter1,
                            IrtPtType Inter2)


Description:

Finds the two intersection points of the given two planar circles.

Parameters:

Center1, Radius1: Geometry of first circle.
Center2, Radius2: Geometry of second circle.
Inter1, Inter2: Where the two intersection locations will be placed.


Returned Value:

int: TRUE for successful computation, FALSE for failure.


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc3D GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2IsPtInsideCirc

Keywords:

circle circle intersection


GM2PointsFromCircCirc3D

(geom_bsc.c:2701)

Prototype:

  int GM2PointsFromCircCirc3D(const IrtPtType Cntr1,
                              const IrtVecType Nrml1,
                              IrtRType Rad1,
                              const IrtPtType Cntr2,
                              const IrtVecType Nrml2,
                              IrtRType Rad2,
                              IrtPtType Inter1,
                              IrtPtType Inter2)


Description:

Compute the intersection of two circles in general position in R^3. The circles are centered at Cntr1/2 in a plane normal to Nrml1/2 and have a radius of Rad1/2. The upto two intersections are returned in Inter1/2.

Parameters:

Cntr1, Nrml1, Rad1: Center, normal and radius of first circle.
Cntr2, Nrml2, Rad2: Center, normal and radius of second circle.
Inter1: First intersection location in E3.
Inter2: Second intersection location in E3.


Returned Value:

int: Number of intersections found - 0, 1, or 2.


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2IsPtInsideCirc

Keywords:




GM2PointsFromLineLine

(geom_bsc.c:1223)

Prototype:

  int GM2PointsFromLineLine(const IrtPtType Pl1,
                            const IrtPtType Vl1,
                            const IrtPtType Pl2,
                            const IrtPtType Vl2,
                            IrtPtType Pt1,
                            IrtRType *t1,
                            IrtPtType Pt2,
                            IrtRType *t2)


Description:

Routine to find the two points Pti on the lines (Pli, Vli), i = 1, 2 with the minimal Euclidean distance between them. In other words, the distance between Pt1 and Pt2 is defined as distance between the two lines. The two points are calculated using the fact that if V = (Vl1 cross Vl2) then these two points are the intersection point between the following: Point 1 - a plane (defined by V and line1) and the line line2. Point 2 - a plane (defined by V and line2) and the line line1. This function returns TRUE iff the two lines are not parallel! This function is also valid for the case of coplanar lines.

Parameters:

Pl1, Vl1: Position and direction defining the first line.
Pl2, Vl2: Position and direction defining the second line.
Pt1: Point on Pt1 that is closest to line 2.
t1: Parameter value of Pt1 as (Pl1 + Vl1 * t1).
Pt2: Point on Pt2 that is closest to line 1.
t2: Parameter value of Pt2 as (Pl2 + Vl2 * t2).


Returned Value:

int: TRUE, if successful.


See Also:

GGMPointFromPlanarLineLine

Keywords:

line line distance line line intersection


GM2TanLinesFromCircCirc

(geom_bsc.c:3089)

Prototype:

  int GM2TanLinesFromCircCirc(const IrtPtType Center1,
                              IrtRType Radius1,
                              const IrtPtType Center2,
                              IrtRType Radius2,
                              int OuterTans,
                              IrtLnType Tans[2])


Description:

Finds the two tangent lines to the given two planar circles.

Parameters:

Center1, Radius1: Geometry of first circle.
Center2, Radius2: Geometry of second circle.
OuterTans: TRUE for outer two tangents, FALSE for inner two.
Tans: The two tangent lines designated by line equatios.


Returned Value:

int: TRUE for successful computation, FALSE for failure or no such bitangents exist for the current configuration.


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc3D GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2PointsFromCircCirc GM2BiTansFromCircCirc GM2IsPtInsideCirc

Keywords:

circle circle tangenties


GM3Pts2EqltrlTriMat

(geomat3d.c:1267)

Prototype:

  int GM3Pts2EqltrlTriMat(const IrtPtType Pt1Orig,
                          const IrtPtType Pt2Orig,
                          const IrtPtType Pt3Orig,
                          IrtHmgnMatType Mat)


Description:

Compute the linear transform that maps the given planar triangle Pt1Pt2Pt3 to an equilateral triangle around the origin so that edge Pt1Pt2 is horizontal and remains of the same size.

Parameters:

Pt1Orig, Pt2Orig, Pt3Orig: The three vertices of the input triangle.
Mat: The computed transform.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMGenMatrix3Pts2EqltrlTri

Keywords:




GMAffineTransUVVals

(poly_pts.c:1815)

Prototype:

  void GMAffineTransUVVals(IPObjectStruct *PObj,
                           const IrtRType Scale[2],
                           const IrtRType Trans[2])


Description:

Affine transform the given UV coordinates in polygonal object PObj, in place.

Parameters:

PObj: A polygonal object to affine transform the UV vals.
Scale: UV scale factors.
Trans: UV translational factors.


Returned Value:

void


See Also:

GMGenUVValsForPolys

Keywords:




GMAllIntersLinePolygon2D

(polysmth.c:618)

Prototype:

  int GMAllIntersLinePolygon2D(const IPVertexStruct *VS,
                               const IrtPtType V1,
                               const IrtPtType V2,
                               IrtRType *AllPrms)


Description:

Check if a line V1V2 and polygon VS interest, in 2D.

Parameters:

VS: Cyclic List of vertices of the Polygon.
V1, V2: The end points of the line.
AllPrms: All the blending values from V1 to V2 where the intersections have occurred will be placed here as - t*V1 + (1-t)*V2. Can be NULL to ignore. The vector, if exists, will be sorted in increasing values.


Returned Value:

int: Number of intersections that detected, zero to ignore.


See Also:

GMIsInterLinePolygon2D GMIsInterLineLine2D

Keywords:




GMAngleSphericalTriangle

(geom_bsc.c:1990)

Prototype:

  IrtRType GMAngleSphericalTriangle(const IrtVecType Dir,
                                    const IrtVecType ODir1,
                                    const IrtVecType ODir2)


Description:

Computes the angle at Dir, with respect to ODir1 and ODir2.

Parameters:

Dir: Spherical vertex to compute its angle with respect to ODir1/2.
ODir1, ODir2: Other two vertices of spherical triangle.


Returned Value:

IrtRType: Spherical angle at Dir.


See Also:

GMAreaSphericalTriangle

Keywords:




GMAnimAffineTransAnimation

(animate.c:271)

Prototype:

  int GMAnimAffineTransAnimation(const IPObjectStruct *PObjs,
                                 IrtRType Trans,
                                 IrtRType Scale)


Description:

Affine transform the animation domain in the given object(s), in place. Domain "D" is mapped to domain "D * Scale + Trans".

Parameters:

PObjs: Objects to update animation domain.
Trans: Translation amount.
Scale: Scale amount.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimationOne

Keywords:

animation


GMAnimAffineTransAnimation2

(animate.c:458)

Prototype:

  int GMAnimAffineTransAnimation2(const IPObjectStruct *PObjs,
                                  IrtRType Min,
                                  IrtRType Max)


Description:

Affine transform the animation domain in the given object(s), in place. Animation domain is mapped to "Min, Max".

Parameters:

PObjs: Objects to update animation domain.
Min, Max: Desired time domain of animation.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimationOne

Keywords:

animation


GMAnimAffineTransAnimationOne

(animate.c:304)

Prototype:

  int GMAnimAffineTransAnimationOne(const IPObjectStruct *PObj,
                                    IrtRType Trans,
                                    IrtRType Scale)


Description:

Affine transform the animation domain in the given object, in place. Domain "D" is mapped to domain "D * Scale + Trans".

Parameters:

PObj: Object to update animation domain.
Trans: Translation amount.
Scale: Scale amount.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimation

Keywords:

animation


GMAnimAffineTransAnimationOne2

(animate.c:493)

Prototype:

  int GMAnimAffineTransAnimationOne2(const IPObjectStruct *PObj,
                                     IrtRType Min,
                                     IrtRType Max)


Description:

Affine transform the animation domain in the given object, in place. Animation domain is mapped to "Min, Max".

Parameters:

PObj: Object to update animation domain.
Min, Max: Desired time domain of animation.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimation

Keywords:

animation


GMAnimCheckInterrupt

(anim_aux.c:44)

Prototype:

  int GMAnimCheckInterrupt(GMAnimationStruct *Anim)


Description:

Should we stop this animation. Senses the event queue of X11.

Parameters:

Anim: The animation to abort.


Returned Value:

int: TRUE if we need to abort, FALSE otherwise.


Keywords:




GMAnimDoAnimation

(animate.c:916)

Prototype:

  void GMAnimDoAnimation(GMAnimationStruct *Anim, IPObjectStruct *PObjs)


Description:

Routine to run a sequence of objects through an animation according to animation attributes of matrices and curves that are attached to them.

Parameters:

Anim: Animation structure.
PObjs: Objects to render.


Returned Value:

void.


See Also:

GMAnimEvalAnimation

Keywords:

animation


GMAnimDoSingleStep

(animate.c:1162)

Prototype:

  void GMAnimDoSingleStep(GMAnimationStruct *Anim, IPObjectStruct *PObjs)


Description:

Routine to exectue a single step the animation, at current time.

Parameters:

Anim: Animation structure.
PObjs: Objects to render.


Returned Value:

void.


See Also:

GMAnimDoAnimation GMAnimEvalAnimation GMAnimSetAnimInternalNodes

Keywords:

animation


GMAnimEvalAnimation

(animate.c:1052)

Prototype:

  void GMAnimEvalAnimation(IrtRType t, IPObjectStruct *PObj)


Description:

Evaluate the animation curves at the given time, setting the proper animation attributes ("_animation_mat" and "_isvisible"), in place.

Parameters:

t: Time to evaluate the animation at.
PObj: To evaluate their animation curves.


Returned Value:

void


See Also:

GMAnimDoAnimation GMAnimEvalAnimationList GMAnimSetAnimInternalNodes GMAnimEvalObjAtTime

Keywords:

animation


GMAnimEvalAnimationList

(animate.c:1137)

Prototype:

  void GMAnimEvalAnimationList(IrtRType t, IPObjectStruct *PObjList)


Description:

Evaluate the animation curves at the given time, setting the proper animation attributes ("_animation_mat" and "_isvisible"), in place.

Parameters:

t: Time to evaluate the animation at.
PObjList: A list of objects to evaluate their animation curves.


Returned Value:

void


See Also:

GMAnimDoAnimation GMAnimEvalAnimation GMAnimSetAnimInternalNodes

Keywords:

animation


GMAnimEvalObjAtTime

(animate.c:1086)

Prototype:

  IPObjectStruct *GMAnimEvalObjAtTime(IrtRType t, IPObjectStruct *PObj)


Description:

Evaluate the animation curves at the given time, and creating the object in the proper place in time.

Parameters:

t: Time to evaluate the animation at.
PObj: To evaluate their animation curves.


Returned Value:

IPObjectStruct *: Input object positioned at time t.


See Also:

GMAnimDoAnimation GMAnimEvalAnimationList GMAnimSetAnimInternalNodes GMAnimEvalAnimation

Keywords:

animation


GMAnimFindAnimationTime

(animate.c:526)

Prototype:

  void GMAnimFindAnimationTime(GMAnimationStruct *Anim,
                               const IPObjectStruct *PObjs)


Description:

Computes the time span for which the animation executes.

Parameters:

Anim: Animation structure to update.
PObjs: Objects to scan for animation attributes.


Returned Value:

void


See Also:

GMAnimFindAnimationTimeOne

Keywords:

animation


GMAnimFindAnimationTimeOne

(animate.c:569)

Prototype:

  void GMAnimFindAnimationTimeOne(GMAnimationStruct *Anim,
                                  const IPObjectStruct *PObj)


Description:

Computes the time span for which the animation executes.

Parameters:

Anim: Animation structure to update.
PObj: One object to scan for animation attributes.


Returned Value:

void


See Also:

GMAnimFindAnimationTime

Keywords:

animation


GMAnimGetAnimInfoText

(animate.c:91)

Prototype:

  void GMAnimGetAnimInfoText(GMAnimationStruct *Anim)


Description:

Getting input parameters of animation from user using textual user interface.

Parameters:

Anim: The animation state to update.


Returned Value:

void


Keywords:

animation


GMAnimHasAnimation

(animate.c:204)

Prototype:

  int GMAnimHasAnimation(const IPObjectStruct *PObjs)


Description:

Scan the given geometry for possible animation attributes.

Parameters:

PObjs: Objects to scan for animation attributes.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimationOne

Keywords:

animation


GMAnimHasAnimationOne

(animate.c:232)

Prototype:

  int GMAnimHasAnimationOne(const IPObjectStruct *PObj)


Description:

Scan the given geometry for possible animation attributes.

Parameters:

PObj: One object to scan for animation attributes.


Returned Value:

int: TRUE if there are animation attributes. FALSE otherwise.


See Also:

GMAnimHasAnimation

Keywords:

animation


GMAnimResetAnimStruct

(animate.c:58)

Prototype:

  void GMAnimResetAnimStruct(GMAnimationStruct *Anim)


Description:

Resets the slots of an animation structure.

Parameters:

Anim: The animation state to reset.


Returned Value:

void


Keywords:

animation


GMAnimSaveIterationsAsImages

(anim_aux.c:64)

Prototype:

  void GMAnimSaveIterationsAsImages(GMAnimationStruct *Anim,
                                    IPObjectStruct *PObjs)


Description:

Saves one iteration of the animation sequence as an image.

Parameters:

Anim: Animation structure.
PObjs: Objects to render.


Returned Value:

void


Keywords:

animation


GMAnimSaveIterationsToFiles

(animate.c:1204)

Prototype:

  void GMAnimSaveIterationsToFiles(GMAnimationStruct *Anim,
                                   IPObjectStruct *PObjs)


Description:

Saves one iteration of the animation sequence as IRIT data (*.itd). The objects that are saved are those that are visibled on the current time frame as set via current animation_mat attribute.

Parameters:

Anim: Animation structure.
PObjs: Objects to render.


Returned Value:

void


Keywords:

animation


GMAnimSetAnimInternalNodes

(animate.c:1020)

Prototype:

  int GMAnimSetAnimInternalNodes(int AnimInternalNodes)


Description:

Allows animation transformations to be saved at internal nodes.

Parameters:

AnimInternalNodes: New setting for internal animation nodes.


Returned Value:

int: Old settings.


See Also:

GMAnimEvalAnimation

Keywords:




GMAnimSetReverseHierarchyMatProd

(animate.c:991)

Prototype:

  int GMAnimSetReverseHierarchyMatProd(int ReverseHierarchyMatProd)


Description:

Controls the order in which animation matrices are multiplied in the hierarchy.

Parameters:

ReverseHierarchyMatProd: TRUE to reversedefautl order.


Returned Value:

int: Old settings.


See Also:

GMAnimEvalAnimation

Keywords:




GMAreaOfTriangle

(geom_bsc.c:3228)

Prototype:

  IrtRType GMAreaOfTriangle(const IrtRType *Pt1,
                            const IrtRType *Pt2,
                            const IrtRType *Pt3)


Description:

Computing the Area of the triangle formed by points Pt1, Pt2 and Pt3. This can be used as a test to identify whether point Pt3 lies to the left, right, or on the line (vector) formed by Pt1 and Pt2 using the this signed area of the triangle's computation.

Parameters:

Pt1, Pt2, Pt3: oints to compute the area of a triangle formed by Pt1, Pt2, and Pt3, in the XY plane.


Returned Value:

IrtRType: Resulting area.


Keywords:




GMAreaSphericalTriangle

(geom_bsc.c:1954)

Prototype:

  IrtRType GMAreaSphericalTriangle(const IrtVecType Dir1,
                                   const IrtVecType Dir2,
                                   const IrtVecType Dir3)


Description:

Computes the area of a spherical triangle over the unit sphere with given three (unit vector) vertices, Dir1, Dir2, Dir3. Area is equal to (Alpha1 + Alpha2 + Alpha3 - Pi) where Alphai is the angle at vertex Diri with the other two vertices.

Parameters:

Dir1, Dir2, Dir3: Vertices of the spherical triangle. unit vectors.


Returned Value:

IrtRType: Computed area.


See Also:

GMAngleSphericalTriangle

Keywords:




GMBBComputeBboxObject

(bbox.c:89)

Prototype:

  GMBBBboxStruct *GMBBComputeBboxObject(const IPObjectStruct *PObj,
                                        GMBBBboxStruct *Bbox)


Description:

Computes a bounding box of a given object of any type.

Parameters:

PObj: To compute a bounding box for.
Bbox: A bounding box of PObj is saved here.


Returned Value:

GMBBBboxStruct *: A bounding box of PObj - reference to Bbox.


See Also:



Keywords:

bounding box


GMBBComputeBboxObjectList

(bbox.c:287)

Prototype:

  GMBBBboxStruct *GMBBComputeBboxObjectList(const IPObjectStruct *PObj,
                                            GMBBBboxStruct *Bbox)


Description:

Computes a bounding box of a list of objects of any type.

Parameters:

PObj: To compute a bounding box for.
Bbox: A pointer to a bounding box holding bounding box information on objects PObj.


Returned Value:

GMBBBboxStruct *: A pointer to a bounding box holding bounding box information on objects PObj.


Keywords:

bounding box


GMBBComputeOnePolyBbox

(bbox.c:349)

Prototype:

  GMBBBboxStruct *GMBBComputeOnePolyBbox(const IPPolygonStruct *PPoly,
                                         GMBBBboxStruct *Bbox)


Description:

Computes a bounding box of a polygon/polyline/pointlist object.

Parameters:

PPoly: To compute a bounding box for.
Bbox: A pointer to a bounding box holding bounding box information on PPoly.


Returned Value:

GMBBBboxStruct *: A pointer to a bounding box holding bounding box information on PPoly.


Keywords:

bounding box


GMBBComputePointBbox

(bbox.c:420)

Prototype:

  GMBBBboxStruct *GMBBComputePointBbox(const IrtRType *Pt, GMBBBboxStruct *Bbox)


Description:

Computes a bounding box of a point object.

Parameters:

Pt: To compute a bounding box for.
Bbox: A pointer to a bounding box holding bounding box information on Pt.


Returned Value:

GMBBBboxStruct *: A pointer to a bounding box holding bounding box information on Pt.


Keywords:

bounding box


GMBBComputePolyListBbox

(bbox.c:383)

Prototype:

  GMBBBboxStruct *GMBBComputePolyListBbox(const IPPolygonStruct *PPoly,
                                          GMBBBboxStruct *Bbox)


Description:

Computes a bounding box for a list of polygon/polyline/pointlist objects.

Parameters:

PPoly: To compute a bounding box for.
Bbox: A pointer to a bounding box holding bounding box information on PPoly list.


Returned Value:

GMBBBboxStruct *: A pointer to a bounding box holding bounding box information on PPoly list.


Keywords:

bounding box


GMBBMergeBbox

(bbox.c:498)

Prototype:

  GMBBBboxStruct *GMBBMergeBbox(GMBBBboxStruct *MergedBbox,
                                const GMBBBboxStruct *Bbox)


Description:

Merges (union) given two bounding boxes into one. Note Dim can be different in both Bboxes in which case higher dims are simply copied from the Bbox that has them.

Parameters:

MergedBbox: first bounding box, to merge Bbox into.
Bbox: A second bounding box to merge with MergedBBox.


Returned Value:

GMBBBboxStruct *: A merged bounding box. Same as MergedBbox.


Keywords:

bounding box


GMBBMergeBboxTo

(bbox.c:450)

Prototype:

  GMBBBboxStruct *GMBBMergeBboxTo(const GMBBBboxStruct *Bbox1,
                                  const GMBBBboxStruct *Bbox2,
                                  GMBBBboxStruct *MergedBbox)


Description:

Merges (union) given two bounding boxes into one. Either Bbox1 or Bbox2 can be pointing to the same address as MergedBBox. Note Dim can be different in both Bboxes in which case higher dims are simply copied from the Bbox that has them.

Parameters:

Bbox1: First bounding box to union up.
Bbox2: Second bounding box to union up.
MergedBbox: unioned bounding box that contains both BBox1 and BBox2.


Returned Value:

GMBBBboxStruct *: A unioned bounding box that contains both BBox1 and BBox2. Same as MergedBBox.


Keywords:

bounding box


GMBBSetBBoxPrecise

(bbox.c:59)

Prototype:

  int GMBBSetBBoxPrecise(int Precise)


Description:

Enforce the computation of a precise bounding box for a freeform.

Parameters:

Precise: 0 for, simpler, looser bbox that is derived using the control poly/mesh. 1 for a better bbox on freeforms, by refining geometry first. 2 for a precise bbox on freeforms, by computing extrema.


Returned Value:

int: old value.


See Also:

GMBBComputeBboxObject

Keywords:

bbox bounding box


GMBBSetGlblBBInstncObjList

(bbox.c:319)

Prototype:

  const IPObjectStruct *GMBBSetGlblBBInstncObjList(const IPObjectStruct
                                                                 *BBInstObjList)


Description:

Sets the global list object to search instances at.

Parameters:

BBInstObjList: Global object list to search instances at.


Returned Value:

const IPObjectStruct *: Old global object list.


Keywords:

bounding box


GMBaryCentric3Pts2DToData

(geom_bsc.c:2480)

Prototype:

  IrtRType *GMBaryCentric3Pts2DToData(const IrtPtType Pt1,
                                      const IrtPtType Pt2,
                                      const IrtPtType Pt3,
                                      const IrtPtType Pt,
                                      IrtVecType RetVal)


Description:

Computes the Barycentric coordinates of given point Pt with respect to given Triangle Pt1 Pt2 Pt3. All points are assumed to be in the XY plane.

Parameters:

Pt1, Pt2, Pt3: Three points forming a triangular in general position.
Pt: A point for which the barycentric coordinates are to be computed.
RetVal: A pointer to a space holding the three Barycentric coefficients, or NULL if point Pt is outside the triangle Pt1 Pt2 Pt3.


Returned Value:

IrtRType *: A pointer to a space holding the three Barycentric coefficients, or NULL if point Pt is outside the triangle Pt1 Pt2 Pt3.


See Also:

GMBaryCentric3PtsToData

Keywords:




GMBaryCentric3PtsToData

(geom_bsc.c:2541)

Prototype:

  IrtRType *GMBaryCentric3PtsToData(const IrtPtType Pt1,
                                    const IrtPtType Pt2,
                                    const IrtPtType Pt3,
                                    const IrtPtType Pt,
                                    IrtVecType RetVal)


Description:

Computes the Barycentric coordinates of given point Pt with respect to given Triangle Pt1 Pt2 Pt3. All points are assumed to be coplanar.

Parameters:

Pt1, Pt2, Pt3: Three points forming a triangular in general position.
Pt: A point for which the barycentric coordinates are to be computed.
RetVal: A pointer to a space holding the three Barycentric coefficients, or NULL if point Pt is outside the triangle Pt1 Pt2 Pt3.


Returned Value:

IrtRType *: A pointer to a space holding the three Barycentric coefficients, or NULL if point Pt is outside the triangle Pt1 Pt2 Pt3.


See Also:

GMBaryCentric3Pts2DToData

Keywords:




GMBasicSetEps

(geom_bsc.c:60)

Prototype:

  IrtRType GMBasicSetEps(IrtRType Eps)


Description:

Sets the epsilon to use in basic geometry processing.

Parameters:

Eps: New epsilon to use.


Returned Value:

IrtRType: Old epsilon value.


Keywords:




GMBlendNormalsToVertices

(intrnrml.c:740)

Prototype:

  void GMBlendNormalsToVertices(IPPolygonStruct *PlList,
                                IrtRType MaxAngle)


Description:

Approximate normals to all vertices of the given geometry by blending the normals of the faces that share the vertex. Assumes polygons are properly oriented. Places on each vertex an "_CosNrmlMaxDev" attribute with the maximal deviation of this normal from an adjacent polygon plane (cosine of the maximal angle).

Parameters:

PlList: List of polygons to blend the normals of their vertices
MaxAngle: etween approximated normal at vertex and polygon normal of the vertex to allow averaging. In degrees. If negative, all vertices normals are cleared and all polygon normals reevaluated (and no vertices normals are evaluated).


Returned Value:

void


See Also:

GMUpdateVerticesByInterp GMFixNormalsOfPolyModel

Keywords:




GMBoxBVHConstructGeneralAlignedFrustum

(box2BVH.c:300)

Prototype:

  void GMBoxBVHConstructGeneralAlignedFrustum(const IrtRType Center[3],
                                              IrtRType SizeX,
                                              IrtRType SizeY,
                                              const IrtRType XAxis[3],
                                              const IrtRType HeightAxis[3],
                                              IrtRType Height,
                                              IrtRType XAngle,
                                              IrtRType YAngle,
                                              GMGeneralFrustumInfoStruct *Frustum)


Description:

Construct a frustum with the given parameters. The frustum consists of six quadrilateral sides, each with an inward-pointing normal.

Parameters:

Center: The center of the narrow base of the frustum.
SizeX, SizeY: The size of the narrow base of the frustum.
XAxis: The X direction of the bases of the frustum.
HeightAxis: The height (Z) axis of the frustum.
Height: The height of the frustum.
XAngle, YAngle: The angles of the frustum in the X and Y directions, respectively.
Frustum: The resulting Frustum.


Returned Value:

void


Keywords:




GMBoxBVHCreate

(box_BVH.c:433)

Prototype:

  GMBoxBVHStruct *GMBoxBVHCreate(const GMBoxBVHInfoStruct **Boxes,
                                 int Num,
                                 int Size)


Description:

construct a box BVH with the given boxes.

Parameters:

Boxes: The boxes to arrange in the BVH.
Num: The number of boxes.
Size: The size of the leaf nodes.


Returned Value:

GMBoxBVHStruct *: The returned BVH.


See Also:



Keywords:




GMBoxBVHDbgConstructGeneralAlignedFrustum

(box2BVH.c:497)

Prototype:

  IPPolygonStruct *GMBoxBVHDbgConstructGeneralAlignedFrustum(
                                              const IrtRType Center[3],
                                              IrtRType SizeX,
                                              IrtRType SizeY,
                                              const IrtRType XAxis[3],
                                              const IrtRType HeightAxis[3],
                                              IrtRType Height,
                                              IrtRType XAngle,
                                              IrtRType YAngle)


Description:

Construct a 3D visualization of the frustum, based on its parameters. The frustum is represented by a list of six IPPolygonStruct, one for side of the frustum.

Parameters:

Center: The center of the narrow base of the frustum.
SizeX, SizeY: The size of the narrow base of the frustum.
XAxis: The X direction of the bases of the frustum.
HeightAxis: The height (Z) axis of the frustum.
Height: The height of the frustum.
XAngle, YAngle: The angles of the frustum in the X and Y directions, respectively.


Returned Value:

IPPolygonStruct *: a 3D visualization of the frustum.


See Also:



Keywords:




GMBoxBVHDbgConstructGeneralAlignedFrustum2

(box2BVH.c:569)

Prototype:

  IPObjectStruct *GMBoxBVHDbgConstructGeneralAlignedFrustum2(
                                              const IrtRType Center[3],
                                              IrtRType SizeX,
                                              IrtRType SizeY,
                                              const IrtRType XAxis[3],
                                              const IrtRType HeightAxis[3],
                                              IrtRType Height,
                                              IrtRType XAngle,
                                              IrtRType YAngle)


Description:

Construct a 3D visualization of the frustum, based on its parameters. The frustum is represented by a IPObjectStruct, construed as a "ruled" object of two bases of the frustum.

Parameters:

Center: The center of the narrow base of the frustum.
SizeX, SizeY: The size of the narrow base of the frustum.
XAxis: The X direction of the bases of the frustum.
HeightAxis: The height (Z) axis of the frustum.
Height: The height of the frustum.
XAngle, YAngle: The angles of the frustum in the X and Y directions, respectively.


Returned Value:

IPObjectStruct *: a 3D visualization of the frustum.


See Also:



Keywords:




GMBoxBVHFree

(box_BVH.c:464)

Prototype:

  void GMBoxBVHFree(GMBoxBVHStruct *BVH)


Description:

frees a box BVH .

Parameters:

BVH: The BVH to free.


Returned Value:

void


See Also:



Keywords:




GMBoxBVHGetBoxIntersection

(box_BVH.c:513)

Prototype:

  int GMBoxBVHGetBoxIntersection(const GMBoxBVHStruct *BVH,
                                 const IrtRType *Max,
                                 const IrtRType *Min,
                                 int *Res)


Description:

Get the Id for all boxes intersecting the given box.

Parameters:

BVH: The BVH.
Max: The maximum coordinates of the box.
Min: The minimum coordinates of the box.
Res: The array to write the result into.


Returned Value:

int: The number of boxes in the result.


See Also:



Keywords:




GMBoxBVHGetBoxNum

(box_BVH.c:486)

Prototype:

  int GMBoxBVHGetBoxNum(const GMBoxBVHStruct *BVH)


Description:

Get the number of boxes in a box BVH.

Parameters:

BVH: The BVH.


Returned Value:

int: the number of boxes in the BVH.


See Also:



Keywords:




GMBoxBVHGetFrustumIntersection

(box_BVH.c:545)

Prototype:

  int GMBoxBVHGetFrustumIntersection(const GMBoxBVHStruct *BVH,
                                     const IrtRType *Max,
                                     const IrtRType *Min,
                                     IrtRType Angle,
                                     int *Res)


Description:

Get the Id for all boxes intersecting the given frustum. The frustum is z aligned wider towards the top.

Parameters:

BVH: The BVH.
Max: The maximum coordinates of the frustum (z is the frustum top, x, y are the maximum coordinates of the lower base).
Min: The minimum coordinates of the frustum (z is the frustum bottom, x, y are the minimum coordinates of the lower base).
Angle: The angle of the frustum.
Res: The array to write the result into.


Returned Value:

int: the number of boxes in the result.


See Also:



Keywords:




GMBoxBVHGetGeneralAlignedFrustumIntersection

(box2BVH.c:423)

Prototype:

  int GMBoxBVHGetGeneralAlignedFrustumIntersection(const GMBoxBVHStruct *BVH,
                                                   const IrtRType Center[3],
                                                   IrtRType SizeX,
                                                   IrtRType SizeY,
                                                   const IrtRType XAxis[3],
                                                   const IrtRType HeightAxis[3],
                                                   IrtRType Height,
                                                   IrtRType XAngle,
                                                   IrtRType YAngle,
                                                   int *Res)


Description:

Get the Id for all boxes overlapping the given frustum. The frustum can have a general-aligned axis and orientation. It is defined by a center point, x and y sizes of the NARROW base, x and height axis directions, height and angle.

Parameters:

BVH: The BVH.
Center: The center of the narrow base of the frustum.
SizeX, SizeY: The size of the narrow base of the frustum.
XAxis: The X direction of the bases of the frustum.
HeightAxis: The height (Z) axis of the frustum.
Height: The height of the frustum.
XAngle, YAngle: The angles of the frustum in the X and Y directions, respectively.
Res: The array to write the result into.


Returned Value:

int: the number of boxes in the result.


See Also:



Keywords:




GMBoxBVHGetGeneralAlignedFrustumIntersection2

(box2BVH.c:460)

Prototype:

  int GMBoxBVHGetGeneralAlignedFrustumIntersection2(
                                      const GMBoxBVHStruct *BVH,
                                      const GMGeneralFrustumInfoStruct *Frustum,
                                      int *Res)


Description:

Get the Id for all boxes overlapping the given frustum. The frustum can have a general-aligned axis and orientation. The frustum can be constructed with the function GMBoxBVHConstructGeneralAlignedFrustum.

Parameters:

BVH: The BVH.
Frustum: The frustum with to interse
Res: The array to write the result into.


Returned Value:

int: the number of boxes in the result.


See Also:

GMBoxBVHConstructGeneralAlignedFrustum

Keywords:




GMBoxBVHTestFrustumIntersection

(box_BVH.c:584)

Prototype:

  int GMBoxBVHTestFrustumIntersection(const GMBoxBVHStruct *BVH,
                                      const IrtRType *Max,
                                      const IrtRType *Min,
                                      IrtRType Angle)


Description:

Check if any Boxes are in the frustum aligned along the Z axis.

Parameters:

BVH: The BVH.
Max: The maximum coordinates of the frustum (z is the frustum top, x, y are the maximum coordinates of the lower base).
Min: The minimum coordinates of the frustum (z is the frustum bottom, x, y are the minimum coordinates of the lower base).
Angle: The angle of the frustum.


Returned Value:

int: 0 if no BVH data intersects the frustum.


See Also:



Keywords:




GMCircleFrom2Pts2Tans

(geom_bsc.c:2876)

Prototype:

  int GMCircleFrom2Pts2Tans(IrtPtType Center,
                            IrtRType *Radius,
                            const IrtPtType Pt1,
                            const IrtPtType Pt2,
                            const IrtVecType Tan1,
                            const IrtVecType Tan2)


Description:

Routine to construct a circle through given 3 points. If two of the points are the same or the three points are collinear it returns FALSE, otherwise (successful), it returns TRUE.

Parameters:

Center: Of computed circle.
Radius: Of computed circle.
Pt1, Pt2: Two points to fit a circle through.
Tan1, Tan2: Two tangents to the circle at Pt1, Pt2.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GM2PointsFromCircCirc3D GM2PointsFromLineLine GM2PointsFromCircCirc GMCircleFrom3Points GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2IsPtInsideCirc

Keywords:

circle


GMCircleFrom3Points

(geom_bsc.c:2809)

Prototype:

  int GMCircleFrom3Points(IrtPtType Center,
                          IrtRType *Radius,
                          const IrtPtType Pt1,
                          const IrtPtType Pt2,
                          const IrtPtType Pt3)


Description:

Routine to construct a circle through given 3 points. If two of the points are the same or the three points are collinear it returns FALSE, otherwise (successful), it returns TRUE.

Parameters:

Center: Of computed circle.
Radius: Of computed circle.
Pt1, Pt2, Pt3: Three points to fit a circle through.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GM2PointsFromCircCirc3D GM2PointsFromLineLine GM2PointsFromCircCirc GMCircleFrom2Pts2Tans GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2IsPtInsideCirc

Keywords:

circle


GMCircleFromLstSqrPts

(geom_bsc.c:2939)

Prototype:

  int GMCircleFromLstSqrPts(IrtPtType Center,
                            IrtRType *Radius,
                            const IrtPtType *Pts,
                            int PtsSize)


Description:

Compute a least-sqaures fitted circle to a set of points, in the XY plane. Returns the center and radius of the computed circle. Solving the problem in a new (U,V) apace by minimizing P^2, P=(U-Uc)^2+(V-Vc)^2-R^2, where (Uc,Vc) the circle center. For the full solution, see http://www.dtcenter.org/met/users/docs/write_ups/circle_fit.pdf.

Parameters:

Center: The circle's center is returned in this param.
Radius: The circle's radius is returned in this param.
Pts: Vector of points to fit a circle to, least squares.
PtsSize: Size of the PTs vector.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:



Keywords:




GMCleanUpDupPolys

(poly_cln.c:139)

Prototype:

  IPPolygonStruct *GMCleanUpDupPolys(IPPolygonStruct **PPolygons, IrtRType Eps)


Description:

Routine to search and remove duplicated identical polygons in the input model, in place.

Parameters:

PPolygons: List of polygons to clean, in place.
Eps: Tolerance of vertices equality, etc.


Returned Value:

IPPolygonStruct *: Reference to the filtered polygons.


See Also:

GMCleanUpPolylineList GMVrtxListToCircOrLin GMFilterInteriorVertices GMCleanUpPolygonList GMTwoPolySameGeom

Keywords:

duplicated polygons cleaning


GMCleanUpPolygonList

(poly_cln.c:184)

Prototype:

  IPPolygonStruct *GMCleanUpPolygonList(IPPolygonStruct **PPolygons,
                                        IrtRType Eps)


Description:

Routine to clean up polygons - delete zero length edges, and polygons with less than 3 vertices, in place.

Parameters:

PPolygons: List of polygons to clean, in place.
Eps: Tolerance of vertices equality, etc.


Returned Value:

IPPolygonStruct *: Reference to the filtered polygons.


See Also:

GMCleanUpPolylineList GMVrtxListToCircOrLin GMFilterInteriorVertices GMCleanUpDupPolys

Keywords:

zero length edges cleaning


GMCleanUpPolylineList

(poly_cln.c:274)

Prototype:

  IPPolygonStruct *GMCleanUpPolylineList(IPPolygonStruct **PPolylines,
                                         IrtRType Eps)


Description:

Routine to clean up polylines of zero length, in place. Valid polylines are assumed to hold at least 3 points, by this function.

Parameters:

PPolylines: List of polylines to clean, in place.
Eps: Tolerance of vertices equality, etc.


Returned Value:

IPPolygonStruct *: Reference to the filtered polylines.


See Also:

GMCleanUpPolygonList GMVrtxListToCircOrLin GMFilterInteriorVertices GMCleanUpPolylineList2

Keywords:

zero length polyline cleaning


GMCleanUpPolylineList2

(poly_cln.c:343)

Prototype:

  IPPolygonStruct *GMCleanUpPolylineList2(IPPolygonStruct *PPolylines)


Description:

Routine to clean up colinear points in polylines, in place.

Parameters:

PPolylines: List of polylines to clean, in place.


Returned Value:

IPPolygonStruct *: Reference to the filtered polylines.


See Also:

GMCleanUpPolygonList GMVrtxListToCircOrLin GMFilterInteriorVertices GMCleanUpPolylineList

Keywords:

colinear points cleaning


GMClipPolysAgainstPlane

(poly_cln.c:673)

Prototype:

  IPPolygonStruct *GMClipPolysAgainstPlane(IPPolygonStruct *PHead,
                                           IPPolygonStruct **PClipped,
                                           IPPolygonStruct **PInter,
                                           IrtPlnType Plane)


Description:

Clips polygons that are at the negative side of the plane foreach Ax + By + Cz + D < 0. Clipped polygons are returned in PClipped list whereas polygons that intersects the plane Plane are returned in PInter.

Parameters:

PHead: Pointer to head of a NULL terminated list of polygons.
PClipped: ist of clipped polygons on the negative side of Plane, if any.
PInter: List of polygons that intersects Plane, if any.
Plane: Plane to clip against.


Returned Value:

IPPolygonStruct *: List of polygons in the positive domain of the Plane.


Keywords:




GMCollinear3Pts

(geom_bsc.c:358)

Prototype:

  int GMCollinear3Pts(const IrtPtType Pt1,
                      const IrtPtType Pt2,
                      const IrtPtType Pt3)


Description:

Verifies the collinearity of three points.

Parameters:

Pt1, Pt2, Pt3: hree points to verify for collinearity.


Returned Value:

int: TRUE if collinear, FALSE otherwise.


See Also:

GMCollinear3PtsInside

Keywords:

collinearity


GMCollinear3PtsInside

(geom_bsc.c:439)

Prototype:

  int GMCollinear3PtsInside(const IrtPtType Pt1,
                            const IrtPtType Pt2,
                            const IrtPtType Pt3)


Description:

Verifies the collinearity of three points and that Pt2 is inside (up to GMBasicColinEps) the line segment (Pt1, Pt3).

Parameters:

Pt1, Pt2, Pt3: hree points to verify for collinearity.


Returned Value:

int: TRUE if collinear and inside segment, FALSE otherwise (including the case of Pt1 == Pt2 or Pt3 == Pt2).


See Also:

GMCollinear3Pts

Keywords:

collinearity


GMCollinear3Vertices

(intrnrml.c:200)

Prototype:

  int GMCollinear3Vertices(const IPVertexStruct *V1,
                           const IPVertexStruct *V2,
                           const IPVertexStruct *V3)


Description:

Verify the collinearity of the given three vertices.

Parameters:

V1, V2, V3: ertices to test for collinearity.


Returned Value:

int: TRUE if collinear, FALSE otherwise.


Keywords:

collinearity


GMComplexRoot

(geom_bsc.c:3798)

Prototype:

  void GMComplexRoot(IrtRType RealVal,
                     IrtRType ImageVal,
                     IrtRType *RealRoot,
                     IrtRType *ImageRoot)


Description:

Computes one root of an imagniary number.

Parameters:

RealVal, ImageVal: The number to compute the root for.
RealRoot, ImageRoot: The computed root.


Returned Value:

void


Keywords:




GMComputeAverageVertex

(polysmth.c:546)

Prototype:

  int GMComputeAverageVertex(const IPVertexStruct *VS,
                             IrtPtType CenterPoint,
                             IrtRType BlendFactor)


Description:

Computes the average location of the vertices in poly VS and blend this average with CenterPoint with ratio BlendFactor (== CenterPoint if 0).

Parameters:

VS: List of vertices of the Polygon.
CenterPoint: Input center location into which average is to be blended.
BlendFactor: 1.0 to move the vertex all the way to the average position otherwise (less than 1.0) to the proper fraction.


Returned Value:

int: TRUE if computed average is valid, FALSE otherwise.


See Also:

GMPolyCentroid GMComputeAverageVertex2

Keywords:




GMComputeAverageVertex2

(polysmth.c:482)

Prototype:

  int GMComputeAverageVertex2(const int *NS,
                              const IPPolyVrtxArrayStruct *PVIdx,
                              IrtPtType CenterPoint,
                              int CenterIndex,
                              IrtRType BlendFactor,
                              IrtRType DesiredRadius)


Description:

Computes the average location of the vertices in vertex indices NS and blend this average with CenterPoint with ratio BlendFactor (== CenterPoint if 0).

Parameters:

NS: List of indices of vertices to average in PVIdx.
PVIdx: Vertex array data structure.
CenterPoint: Input center location into which average is to be blended.
CenterIndex: Input center location index in PVIdx structure.
BlendFactor: 1.0 to move the vertex all the way to the average position otherwise (less than 1.0) to the proper fraction.
DesiredRadius: If positive and curvature attributes (K1Curv and K2Curv) are provided, verify we do not smooth this vertex beyond DesiredRadius (examining max. principle curvature value).


Returned Value:

int: TRUE if computed average is valid, FALSE otherwise.


See Also:

GMPolyCentroid GMComputeAverageVertex

Keywords:




GMConvertPolyToTriangles

(poly_pts.c:260)

Prototype:

  IPPolygonStruct *GMConvertPolyToTriangles(IPPolygonStruct *Pl)


Description:

Converts a single convex polygon to a set of triangles, in place.

Parameters:

Pl: A convex polygon to convert to triangles. If Pl contains collinear edges, singular polygons are likely to be generated as a result.


Returned Value:

IPPolygonStruct *: A list of triangles, to which Pl also points.


See Also:

GMConvertPolysToTriangles2 GMConvertPolysToTriangles

Keywords:




GMConvertPolysToNGons

(poly_pts.c:145)

Prototype:

  IPObjectStruct *GMConvertPolysToNGons(const IPObjectStruct *PlObj,
                                        int n,
                                        int HandleNormals)


Description:

Creates a new polygonal objects out of given one, that contains only polygons of up to n vertices. Non convex polygons are split to convex one so the result will contain convex data only.

Parameters:

PlObj: Polygonal object to split into up to n-gons.
n: Maximal number of vertices.
HandleNormals: TRUE to also process normals of vertices.


Returned Value:

IPObjectStruct *: A polygonal object containing polygons with upto n vertices, representing the same model as PolyObj.


See Also:

ConvexPolyObjectN GMConvertPolysToTriangles GMConvertPolysToRectangles

Keywords:




GMConvertPolysToRectangles

(poly_pts.c:766)

Prototype:

  IPObjectStruct *GMConvertPolysToRectangles(IPObjectStruct *PolyObj)


Description:

Creates a new polygonal object out of given one, that contains only rectangles. Non convex polygons with an empty kernel will generate self- intersecting results. By selecting a centroid location in the kernel of each polygon and connecting that centroid location to all the middle two adjacent edges, for all edges, n rectangular regions are defined for each n-gon, about half the (edge) size.

Parameters:

PolyObj: Polygonal object to split into rectangles, in place.


Returned Value:

IPObjectStruct *: Return list of rectangular polygons.


See Also:

ConvexPolyObjectN GMConvertPolysToNGons GMLimitTrianglesEdgeLen GMConvertPolysToTriangles GMConvertPolysToTriangles2

Keywords:




GMConvertPolysToTriangles

(poly_pts.c:527)

Prototype:

  IPObjectStruct *GMConvertPolysToTriangles(const IPObjectStruct *PObj)


Description:

Creates a new polygonal objects out of given one, that contains only triangles. Non convex polygons are split to convex one which, in turn, converted to triangles. Collinear points are purged away.

Parameters:

PObj: Polygonal object to split into triangles.


Returned Value:

IPObjectStruct *: A polygonal object containing only triangles representing the same model as PolyObj.


See Also:

ConvexPolyObjectN GMConvertPolysToNGons GMLimitTrianglesEdgeLen GMConvertPolysToTriangles2 GMConvertPolysToRectangles GMConvertPolyToTriangles

Keywords:




GMConvertPolysToTriangles2

(poly_pts.c:567)

Prototype:

  IPObjectStruct *GMConvertPolysToTriangles2(const IPObjectStruct *PObj)


Description:

Creates a new polygonal objects out of given one, that contains only triangles. Non convex polygons are split to convex one which, in turn, converted to triangles. Collinear points are used and split at.

Parameters:

PObj: Polygonal object to split into triangles.


Returned Value:

IPObjectStruct *: A polygonal object containing only triangles representing the same model as PolyObj.


See Also:

ConvexPolyObjectN GMConvertPolysToNGons GMLimitTrianglesEdgeLen GMConvertPolysToTriangles GMConvertPolysToRectangles

Keywords:




GMConvertPolysToTrianglesIntrrPt

(poly_pts.c:673)

Prototype:

  IPObjectStruct *GMConvertPolysToTrianglesIntrrPt(IPObjectStruct *PolyObj)


Description:

Creates a new polygonal objects out of given one, that contains only triangles. Non convex polygons are split to convex one which, in turn, converted to triangles. This version triangulates convex polygons by connecting each vertex to the geometric centroid, hence co-linear pts are not purged, and do not create degenerate triangles. All other fields are not handled (normals, etc').

Parameters:

PolyObj: Polygonal object to split into triangles, in place.


Returned Value:

IPObjectStruct *: A polygonal object containing only triangles representing the same model as PolyObj.


See Also:

ConvexPolyObjectN GMConvertPolysToNGons GMLimitTrianglesEdgeLen GMConvertPolysToTriangles GMConvertPolysToRectangles

Keywords:




GMConvexHull

(cnvxhull.c:61)

Prototype:

  int GMConvexHull(IrtE2PtStruct *DTPts, int *NumOfPoints)


Description:

Convex Hull computation of a set of points. The Convex Hull is returned in place, updating NumOfPoints. Algorithm is based on two articles:
1. An Efficient Algorithm For Determining The convex Hull of a Finite Set.
   By R.L. Graham, Information processing letters (1972) 132-133.
2. A Reevolution of an Efficient Algorithm For Determining The Convex Hull
   of a Finite Planar Set. By K.R. Anderson, Information Processing
   Letters, January 1978, Vol. 7, Num. 1, 53-55.


Parameters:

DTPts: The set of point to compute their convex hull.
NumOfPoints: Number of points in set DTPts.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMonotonePolyConvex

Keywords:




GMConvexNormalizeNormal

(convex.c:200)

Prototype:

  int GMConvexNormalizeNormal(int NormalizeNormals)


Description:


Routine to set how normals are blended - with or without normalizations.

Parameters:

NormalizeNormals: TRUE to normalize after blend, FALSE just to blend.


Returned Value:

int: Old value.


See Also:

GMConvexPolyObjectN GMConvexPolyObject

Keywords:

convexity convex polygon


GMConvexPolyObject

(convex.c:266)

Prototype:

  void GMConvexPolyObject(IPObjectStruct *PObj, int HandleNormals)


Description:

Routine to test all polygons in a given object for convexity, and split non convex ones, in place. This function will introduce new vertices to the split polygons.

Parameters:

PObj: To test for convexity of its polygons, and split into convex polygons non convex polygons found, in place. Either a polygonal object or a list of polygonal objects.
HandleNormals: TRUE to also handle normals of vertices.


Returned Value:

void


See Also:

GMConvertPolysToTriangles GMConvexPolyObjectN GMIsConvexPolygon SplitNonConvexPoly

Keywords:

convexity convex polygon


GMConvexPolyObjectN

(convex.c:233)

Prototype:

  IPObjectStruct *GMConvexPolyObjectN(const IPObjectStruct *PObj,
                                      int HandleNormals)


Description:

Routine to test all polygons in a given object for convexity, and split non convex ones, non destructively - the original object is not modified. This function will introduce new vertices to the split polygons.

Parameters:

PObj: To test for convexity of its polygons.
HandleNormals: TRUE to also handle normals of vertices.


Returned Value:

IPObjectStruct *: A duplicate of PObj, but with convex polygons only.


See Also:

GMConvertPolysToTriangles GMConvexPolyObject GMConvexPolygon SplitNonConvexPoly

Keywords:

convexity convex polygon


GMConvexRaysToVertices

(convex.c:172)

Prototype:

  int GMConvexRaysToVertices(int RaysToVertices)


Description:

If TRUE, ray will be fired to vertices. If FALSE, ray as angle bisectors will be used.

Parameters:

RaysToVertices: TRUE for rays to vertices, FALSE bisector rays.


Returned Value:

int: Previous state of raay casting.


See Also:

GMConvexPolyObjectN GMConvertPolysToTriangles ConvexPolyObject nvexPolygon SplitNonConvexPoly GMConvexPolyNormals

Keywords:




GMCoplanar4Pts

(geom_bsc.c:479)

Prototype:

  int GMCoplanar4Pts(const IrtPtType Pt1,
                     const IrtPtType Pt2,
                     const IrtPtType Pt3,
                     const IrtPtType Pt4)


Description:

Verifies the coplanarity of four points.

Parameters:

Pt1, Pt2, Pt3, Pt4: our points to verify for coplanarity.


Returned Value:

int: TRUE if coplanar, FALSE otherwise.


See Also:

GMCollinear3Pts

Keywords:

coplanarity


GMDistLineLine

(geom_bsc.c:1393)

Prototype:

  IrtRType GMDistLineLine(const IrtPtType Pl1,
                          const IrtPtType Vl1,
                          const IrtPtType Pl2,
                          const IrtPtType Vl2)


Description:

Routine to find the distance between two lines (Pli, Vli) , i = 1, 2.

Parameters:

Pl1, Vl1: Position and direction defining the first line.
Pl2, Vl2: Position and direction defining the second line.


Returned Value:

IrtRType: Distance between the two lines.


Keywords:

line line distance


GMDistPointLine

(geom_bsc.c:910)

Prototype:

  IrtRType GMDistPointLine(const IrtPtType Point,
                           const IrtPtType Pl,
                           const IrtPtType Vl)


Description:

Routine to compute the disstance between a 3d point and a 3d line. The line is prescribed using a point on it (Pl) and vector (Vl).

Parameters:

Point: To find the distance to on the line.
Pl, Vl: Position and direction that defines the line.


Returned Value:

IrtRType: The computed distance.


See Also:

MvarDistPointLine

Keywords:

point line distance


GMDistPointPlane

(geom_bsc.c:947)

Prototype:

  IrtRType GMDistPointPlane(const IrtPtType Point, const IrtPlnType Plane)


Description:

Routine to compute the distance between a Point and a Plane. The Plane is prescribed using its four coefficients : Ax + By + Cz + D = 0 given as four elements vector.

Parameters:

Point: To find the distance to on the plane.
Plane: To find the distance to on the point.


Returned Value:

IrtRType: The computed distance.


Keywords:

point plane distance


GMDistPointPoint

(geom_bsc.c:586)

Prototype:

  IrtRType GMDistPointPoint(const IrtPtType P1, const IrtPtType P2)


Description:

Routine to compute the distance between two 3d points.

Parameters:

P1, P2: Two points to compute the distance between.


Returned Value:

IrtRType: Computed distance.


Keywords:

point point distance


GMDistPolyPoly

(geom_bsc.c:1607)

Prototype:

  IrtRType GMDistPolyPoly(const IPPolygonStruct *Pl1,
                          const IPPolygonStruct *Pl2,
                          IPVertexStruct **V1,
                          IPVertexStruct **V2,
                          int TagIgnoreV)


Description:

Finds the closest vertices of Pl1 and Pl2.

Parameters:

Pl1, Pl2: Two polys we seek the closest vertices of the two.
V1, V2: Two vertices on Pl1 and Pl2, respectively that are closest.
TagIgnoreV: f non zero, vertices that own this tag are ignored.


Returned Value:

IrtRType: Distance between V1 and V2.


See Also:

GMDistPolyPt

Keywords:




GMDistPolyPt

(geom_bsc.c:1438)

Prototype:

  IrtRType GMDistPolyPt(const IPPolygonStruct *Pl,
                        IrtPtType Pt,
                        const IPVertexStruct **ExtremeV,
                        int MaxDist)


Description:

Computes the extreme distance between point Pt and polygons/lines Poly. The extreme distance is computed on the vertices of Pl only.

Parameters:

Pl: Poly to examine its extreme distance from point Pt.
Pt: Point to examine its extreme distance from poly Pl.
ExtremeV: Will be set to the vertex at the extreme distance. If NULL it is ignored.
MaxDist: TRUE to compute the maximum distance, FALSE for the minimum.


Returned Value:

IrtRType: Extreme distance, -1.0 if error.


See Also:

GMDistPolyPoly GMDistPolyPt2 UserMinDistPointPolylineList

Keywords:




GMDistPolyPt2

(geom_bsc.c:1507)

Prototype:

  IrtRType GMDistPolyPt2(const IPPolygonStruct *Pl,
                         int IsPolyline,
                         IrtPtType Pt,
                         IPVertexStruct **ExtremeV,
                         int MaxDist)


Description:

Computes the extreme distance between point Pt and polygons/lines Poly. The extreme distance is computed on the vertices and edges of Pl only.

Parameters:

Pl: Poly to examine its extreme distance from point Pt.
IsPolyline: RUE if Pl holds polylines, FALSE if polygons.
Pt: Point to examine its extreme distance from poly Pl.
ExtremeV: Will be set to the location at the vertex with the extreme. If happens between this and next vertex, will be set to this and this vertex with have a "Param" real attribute with the blend factor in [0, 1]. Will be allocated dynamically.
MaxDist: TRUE to compute the maximum distance, FALSE for the minimum.


Returned Value:

IrtRType: Extreme distance, -1.0 if error.


See Also:

GMDistPolyPoly GMDistPolyPt UserMinDistPointPolylineList

Keywords:




GMEvalWeightsVFromPl

(intrnrml.c:250)

Prototype:

  int GMEvalWeightsVFromPl(const IrtRType *Coord,
                           const IPPolygonStruct *Pl,
                           IrtRType *Wgt)


Description:

Compues blending weights for a vertex inside a polygon. Computes the barycentric coordinates of the triangle in Pl, V is in.

Parameters:

Coord: Of vertex that its weights we seek.
Pl: Polygon including V.
Wgt: Vector to update with two weights. Must be of length larger or equal to the number of vertices in Pl.


Returned Value:

int: TRUE if successful, FALSE if failed (V outside Pl).


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

barycentric coordinates


GMExecuteAnimationEvalMat

(animate.c:796)

Prototype:

  IrtRType GMExecuteAnimationEvalMat(IPObjectStruct *AnimationP,
                                     IrtRType Time,
                                     IrtHmgnMatType ObjMat)


Description:

Auxiliary function of ExecuteAnimation. Processes a linked list of objects.

Parameters:

AnimationP: A (list of) animation curve(s) to evaluate at time t.
Time: Time of animation.
ObjMat: A matrix to chain the new animation matrices into.


Returned Value:

IrtRType: Positive if visible (between zero and one hints on opacity), 0.0 otherwise, -1.0 if no visible curve found.


Keywords:




GMFilterInteriorVertices

(poly_cln.c:593)

Prototype:

  IPVertexStruct *GMFilterInteriorVertices(IPVertexStruct *VHead,
                                           IrtRType MinTol,
                                           int n)


Description:

Filters out interior vertices to upto n interior vertices, in place. Computes the angle between adjacent edges and purge the almost collinear ones until we have n interior vertices.

Parameters:

VHead: Pointer to head of NULL terminated list of vertices.
MinTol: Vertices that the inner product of previous edge direction and next edge direction is more than MinTol are purged.
n: Number of interior vertices to keep.


Returned Value:

IPVertexStruct *: Similar list modified in place with only n interior vertices.


See Also:

GMCleanUpPolylineList GMCleanUpPolygonList GMVrtxListToCircOrLin

Keywords:




GMFindLinComb2Vecs

(geom_bsc.c:626)

Prototype:

  int GMFindLinComb2Vecs(const IrtVecType V1,
                         const IrtVecType V2,
                         const IrtVecType V,
                         IrtRType w[2])


Description:

Computes the linear combination of V1 and V2 that yields V. It is assumed that the three vectors are coplanar.

Parameters:

V1, V2: The two vectors that span the plane containing V.
V: To compute lin. comb. "w[0] * V1 + w[1] * V2" for.
w: The two scalar coefficients to be computed.


Returned Value:

int: TRUE if successful, FALSE otherwise.


Keywords:




GMFindPtInsidePoly

(polysmth.c:759)

Prototype:

  int GMFindPtInsidePoly(const IPPolygonStruct *Pl, IrtPtType PtInside)


Description:

Computes a point inside the given polygon, in the XY plane.

Parameters:

Pl: Polygon to find a point inside.
PtInside: Computed interior point.


Returned Value:

int: TRUE if kernel is not empty, FALSE otherwise.


Keywords:




GMFindPtInsidePolyKernel

(polysmth.c:819)

Prototype:

  int GMFindPtInsidePolyKernel(const IPVertexStruct *VE, IrtPtType KrnlPt)


Description:

Computes a point inside the kernel of the given polygon, if has any.

Parameters:

VE: Cyclic list of vertices of the Polygon.
KrnlPt: Computed interior kernel point.


Returned Value:

int: TRUE if kernel is not empty, FALSE otherwise.


Keywords:




GMFindThirdPointInTriangle

(poly_cln.c:737)

Prototype:

  IPVertexStruct *GMFindThirdPointInTriangle(const IPPolygonStruct *Pl,
                                             const IPVertexStruct *V,
                                             const IPVertexStruct *VNext)


Description:

Given two points in triangle, find the third (other) point (vertex) in the triangle.

Parameters:

Pl: Triangle containing edge (V, VNext).
V, VNext: Two given points in triangle.


Returned Value:

IPVertexStruct *: Pointer to the third vertex, or NULL if error.


Keywords:




GMFindUnConvexPolygonNormal

(polysmth.c:927)

Prototype:

  void GMFindUnConvexPolygonNormal(const IPVertexStruct *VL, IrtVecType Nrml)


Description:

Finds the normal of polygon that can be non-convex.

Parameters:

VL: List of vertices of the Polygon.
Nrml: Computed normal of the polygon. Not normalized.


Returned Value:

void


Keywords:




GMFitData

(fit1pts.c:83)

Prototype:

  IrtRType GMFitData(IrtRType** PointData,
                     unsigned int NumberOfPointsToFit,
                     GMFittingModelType FittingModel,
                     IrtRType ModelExtParams[],
                     IrtRType Tolerance)


Description:

This function finds the best model params in the least-squares sense.

Parameters:

PointData: List of data points.
NumberOfPointsToFit: he length of the list of points.
FittingModel: An enumerator indicating which shape type to fit.
ModelExtParams: The resulting external params of the shape.
Tolerance: If the error is smaller then Tolerance return.


Returned Value:

IrtRType: The avereage squared error.


See Also:



Keywords:




GMFitDataWithOutliers

(fit1pts.c:394)

Prototype:

  IrtRType GMFitDataWithOutliers(IrtRType **PointData,
                                 unsigned int NumberOfPointsToFit,
                                 GMFittingModelType FittingModel,
                                 IrtRType ModelExtParams[],
                                 IrtRType Tolerance,
                                 unsigned int NumOfChecks)


Description:

This function finds the best model params in the minimal median least squares sense.

Parameters:

PointData: List of data points.
NumberOfPointsToFit: he length of the list of points.
FittingModel: An enumerator indicating which shape type to fit.
ModelExtParams: The resulting params of the shape.
Tolerance: If the error is smaller then Tolerance return.
NumOfChecks: The number of attempts to calculate best sigma.


Returned Value:

IrtRType: The median squared error.


See Also:

GMFitData

Keywords:

Outliers


GMFitEstimateRotationAxis

(fit1pts.c:810)

Prototype:

  IrtRType GMFitEstimateRotationAxis(IrtPtType *PointsOnObject,
                                     IrtVecType *Normals,
                                     unsigned int NumberOfPoints,
                                     IrtPtType PointOnRotationAxis,
                                     IrtVecType RotationAxisDirection)


Description:

This function estimates a rotation axis of a surface of revolution.

Parameters:

PointsOnObject: Points on the surface.
Normals: Corresponding normals.
NumberOfPoints: The number of points/normals.
PointOnRotationAxis: The result.
RotationAxisDirection: he result.


Returned Value:

IrtRType: The error.


See Also:



Keywords:




GMFitObjectWithOutliers

(fit1pts.c:666)

Prototype:

  IrtRType GMFitObjectWithOutliers(IPPolygonStruct *PPoly,
                                   GMFittingModelType FittingModel,
                                   IrtRType ModelExtParams[],
                                   IrtRType Tolerance,
                                   unsigned int NumOfChecks)


Description:

This function finds the best model params in the minimal median least squares sense. Warning: This function is NOT thread-safe.

Parameters:

PPoly: Pointer the object to estimate.
FittingModel: An enumerator indicating which shape type to fit.
ModelExtParams: The resulting params of the shape. if FittingModel is GM_FIT_PLANE - A, B, C, D of plane equation. GM_FIT_SPHERE - Xcntr, Ycntr, Zcntr, Radius. GM_FIT_CYLINDER - Xcntr, Ycntr, Zcntr, Xdir, Ydir, Zdir, Radius. GM_FIT_CIRCLE - Xcntr, Ycntr, Radius. GM_FIT_CONE - Xapex, Yapex, Zapex, apex semi angle, Xdir, Ydir, Zdir. GM_FIT_TORUS - Xpnt, Ypnt, Zpnt, DiscRad, ExtRad, Xdir, Ydir, Zdir.
Tolerance: If the error is smaller than Tolerance return.
NumOfChecks: The number of attempts to calculate best sigma, 100 is a good start.


Returned Value:

IrtRType: The median squared error.


See Also:

GMFitDataWithOutliers

Keywords:




GMFixNormalsOfPolyModel

(intrnrml.c:1001)

Prototype:

  void GMFixNormalsOfPolyModel(IPPolygonStruct *PlList, int TrustFixedPt)


Description:

Fix orientation discrepancy between polygon normals and vertices normals.

Parameters:

PlList: Polygonal object to correct normals.
TrustFixedPt: 0 to trust the vertices' normal, 1 to trust the orientation of polygons' normals, 2 to reorient the polygons so all plane normals point outside or all inside (based on first poly).


Returned Value:

void


See Also:

GMBlendNormalsToVertices GMFixOrientationOfPolyModel

Keywords:




GMFixOrientationOfPolyModel

(intrnrml.c:880)

Prototype:

  void GMFixOrientationOfPolyModel(IPPolygonStruct *Pls)


Description:

Using computed adjacency information, propagate the orientation of first polygon in the given poly object until all polygons are processed. Disjoint poly-meshes will be marked with an _OrientDisjoint attribute on the first polygon of each disjoint part.

Parameters:

Pls: Polygons to reorient them all based on first polygon.


Returned Value:

void


See Also:



Keywords:




GMFixPolyNormals

(intrnrml.c:1068)

Prototype:

  void GMFixPolyNormals(IPObjectStruct *PObj, int TrustFixPt)


Description:

Correct the (polygonal and/or vertices) normals of a polygonal object via adjacency propagations. As a side effect also allow the split of a polygonal models with disjoint parts, into the disjoint parts. That is, the connected components in the input will be organized as a list object, in place.

Parameters:

PObj: Polygonal object to correct normals, in place.
TrustFixPt: 0 to trust the vertices' normal, 1 to trust the orientation of polygons' normals, 2 to reorient the polygons so all plane normals point outside or all inside (based on first poly). 3 same as 2 but splits disjoint parts in the input object into different objects.


Returned Value:

void


See Also:

GMBlendNormalsToVertices GMFixNormalsOfPolyModel

Keywords:




GMGenMatObjectRotVec

(geomat3d.c:175)

Prototype:

  IPObjectStruct *GMGenMatObjectRotVec(const IrtVecType Vec,
                                       const IrtRType *Degree)


Description:

Routine to generate rotation object around the vector Vec in Degree degs:

Parameters:

Vec: Vector to rotate along its axis.
Degree: Amount of rotation, in degrees.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotVec

Keywords:

rotation transformations


GMGenMatObjectRotX

(geomat3d.c:46)

Prototype:

  IPObjectStruct *GMGenMatObjectRotX(const IrtRType *Degree)


Description:

Routine to generate rotation object around the X axis in Degree degrees:

Parameters:

Degree: Amount of rotation, in degrees.


Returned Value:

IPObjectStruct *: A matrix object.


Keywords:

rotation transformations


GMGenMatObjectRotY

(geomat3d.c:68)

Prototype:

  IPObjectStruct *GMGenMatObjectRotY(const IrtRType *Degree)


Description:

Routine to generate rotation object around the Y axis in Degree degrees:

Parameters:

Degree: Amount of rotation, in degrees.


Returned Value:

IPObjectStruct *: A matrix object.


Keywords:

rotation transformations


GMGenMatObjectRotZ

(geomat3d.c:90)

Prototype:

  IPObjectStruct *GMGenMatObjectRotZ(const IrtRType *Degree)


Description:

Routine to generate rotation object around the Z axis in Degree degrees:

Parameters:

Degree: Amount of rotation, in degrees.


Returned Value:

IPObjectStruct *: A matrix object.


Keywords:

rotation transformations


GMGenMatObjectScale

(geomat3d.c:226)

Prototype:

  IPObjectStruct *GMGenMatObjectScale(const IrtVecType Vec)


Description:

Routine to generate a scaling object.

Parameters:

Vec: Amount of scaling, in X, Y, and Z.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

MatGenMatScale

Keywords:

scaling transformations


GMGenMatObjectTrans

(geomat3d.c:200)

Prototype:

  IPObjectStruct *GMGenMatObjectTrans(const IrtVecType Vec)


Description:

Routine to generate a translation object.

Parameters:

Vec: Amount of translation, in X, Y, and Z.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

MatGenMatTrans

Keywords:

translation transformations


GMGenMatObjectV2V

(geomat3d.c:1236)

Prototype:

  IPObjectStruct *GMGenMatObjectV2V(const IrtVecType V1, const IrtVecType V2)


Description:

Generates a transformation matrix that rotates V1 to V2.

Parameters:

V1, V2: To compute the rotation from (V1) to (V2).


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotVec GMGenMatrixRotV2V

Keywords:

rotation transformations


GMGenMatObjectZ2Dir

(geomat3d.c:116)

Prototype:

  IPObjectStruct *GMGenMatObjectZ2Dir(const IrtVecType Dir)


Description:

Routine to generate rotation object to rotate Z to Dir:

Parameters:

Dir: Vector to rotate Z axis to it.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotV2V GMGenMatrixRotVec

Keywords:

rotation transformations


GMGenMatObjectZ2Dir2

(geomat3d.c:147)

Prototype:

  IPObjectStruct *GMGenMatObjectZ2Dir2(const IrtVecType Dir,
                                       const IrtVecType Dir2)


Description:

Routine to generate rotation object around the vector Dir in Degree degs:

Parameters:

Dir: Vector to rotate Z axis to it.
Dir2: Vector to rotate X axis to it.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

GMGenMatrixZ2Dir2 E GMGenMatrixZ2Dir2 GMGenMatrixZ2Dir GMGenMatObjectZ2Dir GMGenMatrixRotV2V GMGenMatrixRotVec

Keywords:

rotation transformations


GMGenMatrix3Pts2EqltrlTri

(geomat3d.c:1361)

Prototype:

  IPObjectStruct *GMGenMatrix3Pts2EqltrlTri(const IrtPtType Pt1,
                                            const IrtPtType Pt2,
                                            const IrtPtType Pt3)


Description:

Compute the linear transform that maps the given planar triangle Pt1Pt2Pt3 to an equilateral triangle around the origin so that edge Pt1Pt2 is horizontal and remains of the same size.

Parameters:

Pt1, Pt2, Pt3: The three points to compute the mapping for.


Returned Value:

IPObjectStruct *: A matrix object.


See Also:

GM3Pts2EqltrlTriMat

Keywords:

transformations shear


GMGenMatrix4Pts2Affine4Pts

(geomat3d.c:1193)

Prototype:

  int GMGenMatrix4Pts2Affine4Pts(const IrtPtType P0,
                                 const IrtPtType P1,
                                 const IrtPtType P2,
                                 const IrtPtType P3,
                                 const IrtPtType Q0,
                                 const IrtPtType Q1,
                                 const IrtPtType Q2,
                                 const IrtPtType Q3,
                                 IrtHmgnMatType Trans)


Description:

Computes an affine transform from R^3 to R^3 using four points in R^3 and their images under the transform. Such a transform is well defined if and only if the four source points are not coplanar.

Parameters:

P0, P1, P2, P3: The four source points.
Q0, Q1, Q2, Q3: The four image points.
Trans: The computed affine transform. This is a return argument.


Returned Value:

int: TRUE if four source points are non-coplanar, FALSE otherwise.


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotVec GMGenMatrixRotV2V

Keywords:

transformations rotation


GMGenMatrixRotV2V

(geomat3d.c:1121)

Prototype:

  void GMGenMatrixRotV2V(IrtHmgnMatType Mat,
                         const IrtVecType V1,
                         const IrtVecType V2)


Description:

Generates a transformation matrix that rotates V1 to V2.

Parameters:

Mat: To place the computed transformation.
V1, V2: Vector to rotate from (V1) to (V2).


Returned Value:

void


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotVec GMGenMatrix4Pts2Affine4Pts

Keywords:

transformations rotation


GMGenMatrixRotVec

(geomat3d.c:1393)

Prototype:

  void GMGenMatrixRotVec(IrtHmgnMatType Mat,
                         const IrtVecType Vec,
                         IrtRType Degrees)


Description:

Generates a transformation matrix that rotates the object around Vec, Angle degrees.

Parameters:

Mat: To place the computed transformation.
Vec: Vector to rotate along its axis.
Degrees: Amount ofrotation, in degrees.


Returned Value:

void


See Also:

GMGenMatrixZ2Dir GMGenMatrixZ2Dir2 GMGenMatObjectZ2Dir2 GMGenMatrixRotV2V

Keywords:

transformations rotation


GMGenMatrixX2Dir

(geomat3d.c:921)

Prototype:

  void GMGenMatrixX2Dir(IrtHmgnMatType Mat, const IrtVecType Dir)


Description:

Routine to generate rotation matrix to rotate X to Dir:

Parameters:

Mat: To place the computed transformation.
Dir: Direction to take X axis to.


Returned Value:

void


Keywords:

rotation transformations


GMGenMatrixY2Dir

(geomat3d.c:944)

Prototype:

  void GMGenMatrixY2Dir(IrtHmgnMatType Mat, const IrtVecType Dir)


Description:

Routine to generate rotation matrix to rotate Y to Dir:

Parameters:

Mat: To place the computed transformation.
Dir: Direction to take Y axis to.


Returned Value:

void


Keywords:

rotation transformations


GMGenMatrixZ2Dir

(geomat3d.c:967)

Prototype:

  void GMGenMatrixZ2Dir(IrtHmgnMatType Mat, const IrtVecType Dir)


Description:

Same as GMGenTransMatrixZ2Dir but with no scaling and/or translation.

Parameters:

Mat: To place the computed transformation.
Dir: Direction to take Z axis to.


Returned Value:

void


Keywords:

transformations rotation


GMGenMatrixZ2Dir2

(geomat3d.c:1049)

Prototype:

  void GMGenMatrixZ2Dir2(IrtHmgnMatType Mat,
                         const IrtVecType Dir,
                         const IrtVecType Dir2)


Description:

Same as GMGenTransMatrixZ2Dir2 but with no scaling and/or translation.

Parameters:

Mat: To place the computed transformation.
Dir: Direction to take Z axis to.
Dir2: Direction to take X axis to.


Returned Value:

void


Keywords:

transformations rotation


GMGenPolyline2Vrtx

(polyprop.c:397)

Prototype:

  IPPolygonStruct *GMGenPolyline2Vrtx(IrtVecType V1,
                                      IrtVecType V2,
                                      IPPolygonStruct *Pnext)


Description:

Routine to create a polyline out of a list of 2 vertices V1/2. No test is made to make sure the 2 points are not the same... The points are placed in order.

Parameters:

V1, V2: Two vertices of the constructed polyline.
Pnext: Next is chain of polylines, in linked list.


Returned Value:

IPPolygonStruct *: The constructed polyline.


See Also:

PrimGenPolygon3Vrtx PrimGenPolygon4Vrtx

Keywords:




GMGenProjectionMat

(geomat3d.c:1429)

Prototype:

  void GMGenProjectionMat(const IrtPlnType ProjPlane,
                          const IrtRType EyePos[4],
                          IrtHmgnMatType Mat)


Description:

Constructs a matrix that projects 3D objects to the Projection Plane ProjPlane, having the eye at EyePos. This solution is derived by solving for the intersection point of the line through the eye and the projected point and the given plane.

Parameters:

ProjPlane: The plane to project the objects onto.
EyePos: The position of the eye.
Mat: Matrix to update.


Returned Value:

void


See Also:

GMGenReflectionMat

Keywords:




GMGenReflectionMat

(geomat3d.c:1477)

Prototype:

  void GMGenReflectionMat(const IrtPlnType ReflectPlane, IrtHmgnMatType Mat)


Description:

Constructs a matrix that reflects 3D objects based upon the prescribed reflection plane, ReflectPlane. Uses a Householder reflection to immediately construct the refelction matrix (around the origin).

Parameters:

ReflectPlane: The plane to computed a reflection matrix for.
Mat: Matrix to update.


Returned Value:

void


See Also:

GMGenProjectionMat GMGenMatrixZ2Dir

Keywords:




GMGenRotateMatrix

(convex.c:126)

Prototype:

  void GMGenRotateMatrix(IrtHmgnMatType Mat, const IrtVecType Dir)


Description:

Routine to prepare a transformation martix to rotate such that Dir is parallel to the Z axes. Used by the convex decomposition to rotate the polygons to be XY plane parallel. Algorithm: form a 4 by 4 matrix from Dir as follows:
               |  Tx  Ty  Tz  0 |   A transformation which takes the coord
               |  Bx  By  Bz  0 |  system into T, N & B as required.
[X  Y  Z  1] * |  Nx  Ny  Nz  0 |
               |  0   0   0   1 |

N is exactly Dir, but we got freedom on T & B which must be on a plane perpendicular to N and perpendicular between them but thats all! T is therefore selected using this (heuristic ?) algorithm: Let P be the axis of which the absolute N coefficient is the smallest. Let B be (N cross P) and T be (B cross N).

Parameters:

Mat: To place the constructed homogeneous transformation.
Dir: To derive a transformation such that Dir goes to Z axis.


Returned Value:

void


Keywords:

transformations


GMGenTransMatrixZ2Dir

(geomat3d.c:873)

Prototype:

  void GMGenTransMatrixZ2Dir(IrtHmgnMatType Mat,
                             const IrtVecType Trans,
                             const IrtVecType Dir,
                             IrtRType Scale)


Description:

Routine to prepare a transformation martix to do the following (in this order): scale by Scale, rotate such that the Z axis is in direction Dir and then translate by Trans. Algorithm: given the Trans vector, it forms the 4th line of Mat. Dir is used to form the second line (the first 3 lines set the rotation), and finally Scale is used to scale first 3 lines/columns to the needed scale:
               |  Tx  Ty  Tz  0 |   A transformation which takes the coord
               |  Bx  By  Bz  0 |  system into T, N & B as required and
[X  Y  Z  1] * |  Nx  Ny  Nz  0 |  then translate it to C. T, N, B are
               |  Cx  Cy  Cz  1 |  scaled by Scale.

N is exactly Dir (unit vec) but we got freedom on T & B which must be on a plane perpendicular to N and perpendicular between them but thats all! T is therefore selected using this (heuristic ?) algorithm: Let P be the axis of which the absolute N coefficient is the smallest. Let B be (N cross P) and T be (B cross N).

Parameters:

Mat: To place the computed transformation.
Trans: Translation factor.
Dir: Direction to take Z axis to.
Scale: Scaling factor.


Returned Value:

void


Keywords:

transformations rotation


GMGenTransMatrixZ2Dir2

(geomat3d.c:1006)

Prototype:

  void GMGenTransMatrixZ2Dir2(IrtHmgnMatType Mat,
                              const IrtVecType Trans,
                              const IrtVecType Dir,
                              const IrtVecType Dir2,
                              IrtRType Scale)


Description:

Routine to prepare a transformation martix to do the following (in this order): scale by Scale, rotate such that the Z axis is in direction Dir and X axis is direction Dir2 and then translate by Trans. Algorithm: given the Trans vector, it forms the 4th line of Mat. Dir is used to form the second line (the first 3 lines set the rotation), and finally Scale is used to scale first 3 lines/columns to the needed scale:
               |  Tx  Ty  Tz  0 |   A transformation which takes the coord
               |  Bx  By  Bz  0 |  system into T, N & B as required and
[X  Y  Z  1] * |  Nx  Ny  Nz  0 |  then translate it to C. T, N, B are
               |  Cx  Cy  Cz  1 |  scaled by Scale.

N is exactly Dir (unit vec) and T is exactly Dir2.

Parameters:

Mat: To place the computed transformation.
Trans: Translation factor.
Dir: Direction to take Z axis to.
Dir2: Direction to take X axis to.
Scale: Scaling factor.


Returned Value:

void


Keywords:

transformations rotation


GMGenUVValsForPolys

(poly_pts.c:1859)

Prototype:

  void GMGenUVValsForPolys(const IPObjectStruct *PObj,
                           IrtRType UTextureRepeat,
                           IrtRType VTextureRepeat,
                           IrtRType WTextureRepeat,
                           int HasXYZScale)


Description:

Generates UV values for polygonal geometry, based on the XY(Z) coordinates of the geometry. Will NOT overwrite existing "uvvals", if any.

Parameters:

PObj: A polygonal object to update UV vals for.
UTextureRepeat, VTextureRepeat, WTextureRepeat: Repeat texture factors.
HasXYZScale: If TRUE, WTextureRepeat is also valid - use XYZ coords.


Returned Value:

void


See Also:

GMAffineTransUVVals

Keywords:




GMGetGeneralAlignedFrustumPtsIntersection

(box2BVH.c:132)

Prototype:

  CagdBType GMGetGeneralAlignedFrustumPtsIntersection(
                                                const IrtRType Center[3],
                                                IrtRType SizeX,
                                                IrtRType SizeY,
                                                const IrtRType XAxis[3],
                                                const IrtRType HeightAxis[3],
                                                IrtRType Height,
                                                IrtRType XAngle,
                                                IrtRType YAngle,
                                                const IrtRType **Pts,
                                                int NumPts,
                                                CagdBType RationalPts,
                                                IrtRType Tol)


Description:

Checks if a set of points is outside of a frustum, within a given tolerance. The frustum is constructed from its parameters. The points are treated as a solid convex body. The frustum can have a general alignment.

Parameters:

Center: The center of the narrow base of the frustum.
SizeX, SizeY: The size of the narrow base of the frustum.
XAxis: The X direction of the bases of the frustum.
HeightAxis: The height (Z) axis of the frustum.
Height: The height of the frustum.
XAngle, YAngle: The angles of the frustum in the X and Y directions, respectively.
Pts: An array of points to be tested.
NumPts: The number of points in the array.
RationalPts: A flag indicating if the points are in projective (rational) coordinates.
Tol: The allowed tolerance.


Returned Value:

CagdBType: Non-zero if the frustum and box overlap.


See Also:

GMGetGeneralAlignedFrustumPtsIntersection2

Keywords:




GMGetGeneralAlignedFrustumPtsIntersection2

(box2BVH.c:42)

Prototype:

  IrtBType GMGetGeneralAlignedFrustumPtsIntersection2(
                                      const GMGeneralFrustumInfoStruct *Frustum,
                                      const IrtRType **Pts,
                                      int NumPts,
                                      IrtBType RationalPts,
                                      IrtRType Tolerance)


Description:

Checks if a set of points is outside of a frustum, within a given tolerance. The points are treated as a solid convex body. The frustum can have a general alignment.

Parameters:

Frustum: The frustum info.
Pts: An array of points to be tested.
NumPts: The number of points in the array.
RationalPts: A flag indicating if the points are in projective (rational) coordinates.
Tolerance: The allowed tolerance.


Returned Value:

IrtBType: Non-zero if the frustum and box overlap.


See Also:

GMGetGeneralAlignedFrustumPtsIntersection

Keywords:




GMGetMatTransPortion

(geomat3d.c:253)

Prototype:

  IPObjectStruct *GMGetMatTransPortion(const IPObjectStruct *MatObj,
                                       int TransPortion)


Description:

Routine to extract the translational part of a matrix or dump it.

Parameters:

MatObj: To operate on.
TransPortion: TRUE to extract translational portion out of Mat, FALSE to dump the translational portion from Mat.


Returned Value:

IPObjectStruct *: A matrix object hold either the translational portion of Mat or anything but the translational part.


Keywords:

translation transformations


GMGetMaxNumVrtcsPoly

(poly_pts.c:107)

Prototype:

  int GMGetMaxNumVrtcsPoly(IPObjectStruct *PolyObj)


Description:

Go over all polygons in given object and return the maximal number of vertices found in a single poly.

Parameters:

PolyObj: Polygonal object to look for its largest poly.


Returned Value:

int: Maximal number of vertices found in one poly.


Keywords:




GMIdentifyTJunctions

(poly_pts.c:2163)

Prototype:

  int GMIdentifyTJunctions(IPObjectStruct *PObj,
                           GMIdentifyTJunctionFuncType TJuncCB,
                           IrtRType Eps)


Description:

Function to search for T junctions in given polygonal mesh Polys. The call back function TJunCB is invoked on every such T junction. This functions offers a naive and non-optimal (N^2) solution.

Parameters:

PObj: Polygonal mesh to search for T junctions in.
TJuncCB: Call back function to invoke with every detected T junction. If E0 = (V0, V0 -> Pnext) is adjacent to both E1 = (V1, V1 -> Pnext) and E2 = (V2, V2 -> Pnext) so E2 is a T junction vertex on edge E0, the TJuncCB will be invoked as TJuncCB(V0, V1, V2, Pl0, Pl1, Pl2).
Eps: Tolerance of testing.


Returned Value:

int: Number of detected T junctions, zero if none.


See Also:

GMIsTJunction

Keywords:




GMInterpVrtxNrmlBetweenTwo

(intrnrml.c:303)

Prototype:

  void GMInterpVrtxNrmlBetweenTwo(IPVertexStruct *V,
                                  const IPVertexStruct *V1,
                                  const IPVertexStruct *V2)


Description:

Update Normal of the middle vertex V, assumed to be between V1 and V2.

Parameters:

V: Vertex that its normal is to be updated.
V1, V2: Edge V is assumed to be on so that the two normals of V1 and V2 can be blended to form the normal of V.


Returned Value:

void


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

normals


GMInterpVrtxNrmlBetweenTwo2

(intrnrml.c:354)

Prototype:

  void GMInterpVrtxNrmlBetweenTwo2(IrtPtType Pt,
                                   IrtVecType Normal,
                                   const IPVertexStruct *V1,
                                   const IPVertexStruct *V2,
                                   int Normalize)


Description:

Update normal of middle position Pt, assumed to be between V1 and V2.

Parameters:

Pt: Middle position at which a normal is to be computed.
Normal: Where resulting vector is to be placed.
V1, V2: Edge V is assumed to be on so that the two normals of V1 and V2 can be blended to form the normal of V.
Normalize: TRUE to return a unit size vector.


Returned Value:

void


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

normals


GMInterpVrtxNrmlFromPl

(intrnrml.c:402)

Prototype:

  int GMInterpVrtxNrmlFromPl(IPVertexStruct *Vrtx, const IPPolygonStruct *Pl)


Description:

Update Normal of vertex V, based on surrounding polygon Pl.

Parameters:

Vrtx: Vertex that its normal is to be updated.
Pl: Polygon surrounding V to interpolate normal from.


Returned Value:

int: TRUE if point is inside polygon, FALSE otherwise.


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

normals


GMInterpVrtxRGBBetweenTwo

(intrnrml.c:456)

Prototype:

  int GMInterpVrtxRGBBetweenTwo(IPVertexStruct *V,
                                const IPVertexStruct *V1,
                                const IPVertexStruct *V2)


Description:

Update RGB of the middle vertex V, assumed to be between V1 and V2.

Parameters:

V: Vertex that its rgb color is to be updated.
V1, V2: Edge V is assumed to be on so that the two rgb colors of V1 and V2 can be blended to form the rgb color of V.


Returned Value:

int: TRUE if successful, FALSE if failed.


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

rgb color


GMInterpVrtxRGBFromPl

(intrnrml.c:502)

Prototype:

  int GMInterpVrtxRGBFromPl(IPVertexStruct *Vrtx, const IPPolygonStruct *Pl)


Description:

Update rgb color of vertex V, based on surrounding polygon Pl.

Parameters:

Vrtx: Vertex that its rgb color is to be updated.
Pl: Polygon surrounding V to interpolate rgb color from.


Returned Value:

int: TRUE if point is inside polygon, FALSE otherwise.


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

rgb color


GMInterpVrtxUVBetweenTwo

(intrnrml.c:567)

Prototype:

  int GMInterpVrtxUVBetweenTwo(IPVertexStruct *V,
                               const IPVertexStruct *V1,
                               const IPVertexStruct *V2)


Description:

Update UV of the middle vertex V, assumed to be between V1 and V2.

Parameters:

V: Vertex that its UV coordinates are to be updated.
V1, V2: Edge V is assumed to be on so that the two UV coords of V1 and V2 can be blended to form the UV coords of V.


Returned Value:

int: TRUE if successful, FALSE if failed.


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVFromPl

Keywords:

uv coordinates


GMInterpVrtxUVFromPl

(intrnrml.c:613)

Prototype:

  int GMInterpVrtxUVFromPl(IPVertexStruct *Vrtx, const IPPolygonStruct *Pl)


Description:

Update UV coordinate of vertex V, based on surrounding polygon Pl.

Parameters:

Vrtx: Vertex that its UV coordinate is to be updated.
Pl: Polygon surrounding V to interpolate UV coordinate from.


Returned Value:

int: TRUE if successful, FALSE if failed.


See Also:

GMUpdateVerticesByInterp GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo

Keywords:

uv coordinates


GMInverseBilinearMap

(geomvals.c:441)

Prototype:

  int GMInverseBilinearMap(const IrtPtType P00,
                           const IrtPtType P01,
                           const IrtPtType P10,
                           const IrtPtType P11,
                           const IrtPtType PtInt,
                           IrtPtType UV[2])


Description:

Computes the inverse of the bilinear mapping. Given four points, Pij, defining a bilinear mapping in the plane, and a point PtInt, inside it, computes the UV coordinates of PtInt in this bilinear mapping:
B(u, v) = (1-u) * ((1- v) P00 + v P10) + u * ((1-v) P01 + V P11).

Solution follows the following steps: 1. Isolate v as a function of the 5 points and u. Two equations for x and y. 2. Equate the two functions from 1, eliminating v. We have only terms of u and (1-u) or get a polynomial quadratic Bezier, once having a common denominator and examining only the numerator. 3. Solve the quadratic equation in u and then substitute to one of the two equations of 1 to get v.

Parameters:

P00, P01, P10, P11: The four points defining the bilinear.
PtInt: A 5th point in the plane, to computes its UV values.
UV: The computed solutions (up to two solutions are possible.


Returned Value:

int: 0 if error. Otherwise number of solution in UV.


Keywords:




GMIsConvexPolygon

(convex.c:479)

Prototype:

  int GMIsConvexPolygon(IPPolygonStruct *Pl)


Description:

Routine to test if the given polygon is convex or not. Algorithm: The polygon is convex iff the normals generated from cross products of two consecutive edges points to the same direction. Note a 5 star polygon satisfies this constraint but it is self intersecting and we assume given polygon is not self intersecting. The computed direction is also verified against the polygon's plane normal. The routine returns TRUE iff the polygon is convex. In addition the polygon CONVEX tag (see IPPolygonStruct) is also updated. If the polygon is already marked as convex, nothing is tested!

Parameters:

Pl: To test its convexity condition. Reverses vertices in place if needed.


Returned Value:

int: TRUE if convex, FALSE otherwise.


See Also:

GMConvertPolysToTriangles GMConvexPolyObject GMConvexPolyObjectN SplitNonConvexPoly GMIsConvexPolygon2

Keywords:

convexity convex polygon


GMIsConvexPolygon2

(convex.c:411)

Prototype:

  int GMIsConvexPolygon2(const IPPolygonStruct *Pl)


Description:

Routine to test if the given polygon is convex (by IRIT definition) or not. For both closed and open vertex lists. Algorithm: The polygon is convex iff the normals generated from cross products of two consecutive edges points to the same direction. The same direction is tested by a positive dot product.

Parameters:

Pl: To test for convexity.


Returned Value:

int: TRUE if PL convex, FALSE otherwise.


See Also:

GMIsConvexPolygon

Keywords:

convexity files parser


GMIsInterLineLine2D

(polysmth.c:725)

Prototype:

  static int GMIsInterLineLine2D(const IrtPtType A1,
                                 const IrtPtType A2,
                                 const IrtPtType B1,
                                 const IrtPtType B2,
                                 IrtRType *t)


Description:

Check if the two lines A1A2 and B1B2 interest in the XY plane. End points intersections, up to IRIT_EPS, are ignored.

Parameters:

A1, A2: The two points of first line.
B1, B2: The two points of second line.
t: The blending value from B1 to B2 where the intersection has occurred. Can be NULL to ignore.


Returned Value:

int: TRUE if the two lines intersect, FALSE otherwise.


See Also:

GMAllIntersLinePolygon2D GMIsInterLinePolygon2D

Keywords:




GMIsInterLinePolygon2D

(polysmth.c:680)

Prototype:

  int GMIsInterLinePolygon2D(const IPVertexStruct *VS,
                             const IrtPtType V1,
                             const IrtPtType V2,
                             IrtRType *t)


Description:

Check if a line V1V2 and polygon VS interest, in 2D.

Parameters:

VS: Cyclic List of vertices of the Polygon.
V1, V2: The end points of the line.
t: The blending value from V1 to V2 where the intersection has occurred. Can be NULL to ignore.


Returned Value:

int: TRUE if line and polygon do interest, FALSE otherwise.


See Also:

GMAllIntersLinePolygon2D GMIsInterLineLine2D

Keywords:




GMIsPolygonPlanar

(poly_cln.c:387)

Prototype:

  int GMIsPolygonPlanar(const IPPolygonStruct *Pl, IrtRType Tol)


Description:

Examines the planarity of the given object.

Parameters:

Pl: Polygons to examine for planairy up to tolerance Tol.
Tol: Of planarify verification.


Returned Value:

int: TRUE if poly planar, FALSE if not.


Keywords:




GMIsPtInsideCirc

(geom_bsc.c:3174)

Prototype:

  int GMIsPtInsideCirc(const IrtRType *Point,
                       const IrtRType *Center,
                       IrtRType Radius)


Description:

Tests if a point is contained in the given prescribed circle in XY plane. Points on the circle are not considered inside (open domain).

Parameters:

Point: Point to test for containment in the circle in XY plane.
Center: Center of the circle to test against.
Radius: Radius of the circle to test against.


Returned Value:

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


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc3D GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2PointsFromCircCirc GMIsPtOnCirc

Keywords:




GMIsPtOnCirc

(geom_bsc.c:3203)

Prototype:

  int GMIsPtOnCirc(const IrtRType *Point,
                   const IrtRType *Center,
                   IrtRType Radius)


Description:

Tests if a point is on the given prescribed circle's boundary, in the N XY plane.

Parameters:

Point: Point to test for inclusing in circle boundary in XY plane.
Center: Center of the circle to test against.
Radius: Radius of the circle to test against.


Returned Value:

int: TRUE if Point is indeed on the circle, FALSE otherwise.


See Also:

GM2PointsFromLineLine GM2PointsFromCircCirc3D GMCircleFrom3Points GMCircleFrom2Pts2Tans GM2BiTansFromCircCirc GM2TanLinesFromCircCirc GM2PointsFromCircCirc GMIsPtInsideCirc

Keywords:




GMLimitTrianglesEdgeLen

(poly_pts.c:1659)

Prototype:

  IPPolygonStruct *GMLimitTrianglesEdgeLen(const IPPolygonStruct *OrigPls,
                                           IrtRType MaxLen)


Description:

Splits all triangles that has edge length larger than MaxLen. The output will have no edge in no triangle with length larger than MaxLen.

Parameters:

OrigPls: List of triangles.
MaxLen: Maximum allowed length of an edge of a triangle.


Returned Value:

IPPolygonStruct *: Splitted polygons with edges smaller/equal to MaxLen.


See Also:

ConvexPolyObjectN GMConvertPolysToNGons GMConvertPolysToTriangles

Keywords:




GMLineFrom2Planes

(geom_bsc.c:1331)

Prototype:

  int GMLineFrom2Planes(const IrtPlnType Pl1,
                        const IrtPlnType Pl2,
                        IrtPtType Pt,
                        IrtVecType Dir)


Description:

Find the intersection line (if exists) of two planes.

Parameters:

Pl1, Pl2: Two planes to consider.
Pt, Dir: Intersection line found (if any).


Returned Value:

int: TRUE if exists an intersection point, FALSE otherwise.


Keywords:




GMLineFrom2Points

(geom_bsc.c:684)

Prototype:

  int GMLineFrom2Points(IrtLnType Line, const IrtPtType Pt1, const IrtPtType Pt2)


Description:

Routine to construct a line through 2 points, in the plane. If the points are the same it returns FALSE, otherwise (successful), TRUE.

Parameters:

Line: To compute as Ax + By + C, such that A^2 + B^2 = 1.
Pt1, Pt2: Two points to fit a line through. Only XY coordinates are considered.


Returned Value:

int: TRUE if successful, FALSE otherwise.


Keywords:

line


GMLineSweep

(ln_sweep.c:45)

Prototype:

  void GMLineSweep(GMLsLineSegStruct **Lines)


Description:

Computes all intersections between all given lines, in the plane. The Lines segments are updated so the Inters slot holds the list of intersections with the other segments, NULL if none. Returned is a list with possibly a different order than that is given.

Parameters:

Lines: To compute all intersections against each other, in the plane.


Returned Value:

void


Keywords:

line sweep line line intersections


GMLoadTextFont

(text.c:42)

Prototype:

  int GMLoadTextFont(const char *FName)


Description:

Loads the IRIT font file that is specified by the FName file name. An IRIT font file contains the geometries of the characters as a list ordered according to the ASCII table starting from 32 (space). Chars can, alternatively, be prescribed by their names in the list as ASCII???

Parameters:

FName: Name of IRIT font file to load.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMakeTextGeometry

Keywords:




GMMakeTextGeometry

(text.c:100)

Prototype:

  IPObjectStruct *GMMakeTextGeometry(const char *Str,
                                     const IrtVecType Spacing,
                                     const IrtRType *Scaling)


Description:

Constructs a geometry representing the given text in Str, with Spacing space between character and scaling factor of Scale. If no font is loaded, this functions also loads the default font in iritfont.itd in the directory that is prescribed by the IRIT_PATH environment variable.

Parameters:

Str: The text to convert to geometry.
Spacing: Between individual characters, in X, Y, Z.
Scaling: Relative, with scaling of one generates unit size chars.


Returned Value:

IPObjectStruct *: Geometry representing the given text.


See Also:

GMLoadTextFont

Keywords:




GMMatFromPosDir

(geomat3d.c:1079)

Prototype:

  int GMMatFromPosDir(const IrtPtType Pos,
                      const IrtVecType Dir,
                      const IrtVecType UpDir,
                      IrtHmgnMatType Mat)


Description:

Routine to create a viewing transformation matrix, standing at Pos, and looking in direction Dir, with UpDir being the upper viewing direction Creates a transformation matrix that takes Pos to DEFAULT_VIEW_POS and rotate Dir into the Z axis, and UpDir into the Y axis.

Parameters:

Pos: The location of the viewer.
Dir: The viewing direction.
UpDir: The direction of up. Must be different than Dir.
Mat: Matrix to update. N


Returned Value:

int: TRUE if succesful, FALSE otherwise.


Keywords:

transformations


GMMatchPointListIntoPolylines

(poly_pts.c:979)

Prototype:

  IPPolygonStruct *GMMatchPointListIntoPolylines(IPObjectStruct *PtsList,
                                                 IrtRType MaxTol)


Description:

Connect the list of points into polylines by connecting the closest point pairs, until the distances between adjacent points/polylines is more than MaxTol. Points are assumed to be in E3.

Parameters:

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


Returned Value:

IPPolygonStruct *: Connected polylines, upto MaxTol tolerance.


Keywords:




GMMatrixToTransform

(quatrnn.c:898)

Prototype:

  void GMMatrixToTransform(IrtHmgnMatType Mat,
                           IrtVecType S,
                           GMQuatType R,
                           IrtVecType T)
  


Description:

Decompose the affine transformation matrix into uniform scaling, rotation and translation components. Rotation is defined as normal and angle.

Parameters:

Mat: Source matrix to decompose.
S: Scaling components.
R: Rotation Components.
T: Translation components.


Returned Value:

void


Keywords:




GMMergeClosedLoopHoles

(merge.c:663)

Prototype:

  IPPolygonStruct *GMMergeClosedLoopHoles(IPPolygonStruct *PlMain,
                                          IPPolygonStruct *PClosedPls)


Description:

This routines combines a given polygon with its interior closed loops by adding an edge from the polygon boundary to each of its closed loops For example:

+-----------------------+      +-----------------------+
|                       |      |                       |
|  / \         / \      |      |  / \________ / \      |
|  \ /        |   |     |      |  \ /        |   |_____|
|      _       \ /      | -->  |      _       \ /      |
|     / \_              | -->  |     / \_              |
|    |    |             |      |    |    |_____________|
|     \__/              |      |     \__/              |
|                       |      |                       |
+-----------------------+      +-----------------------+


Algorithm:
1. Transform the polygon and the closed loops to a plane parallel to XY
   plane (Z = Const plane).
2. For each loop find its MaxX while keeping the information on the
   vertex on that extremum.
3. For the loop with the biggest MaxX:
   3.1. based on the sign of the area decide to reverse (or not) the inner
        loop.
   3.2. Fire a ray from the extremum vertex, to the +X direction outside
        of the loop till it intersect the polygon, break the polygon at
        that point and add two edges to beginning of loop from breaking
        point and from end of loop to breaking point (beginning/end point
        of loop is the extrema vertex point).
4. Repeat step 3, with all loops.
5. Transform the new polygon back (using the inverse matrix of step 1)
   to its original orientation.


Parameters:

PlMain: Main polygon to combine with the given closed loops, in place.
PClosedPls: losed loops inside polygon PlMain, to merge with, in place.


Returned Value:

IPPolygonStruct *: Merged polygon, based on PlMain, or NULL if error.


See Also:

MvarPolyMergePolylines GMMergePolylines GMMergeSameGeometry

Keywords:

merge polygons holes


GMMergeFindSimilarPoints

(merge.c:894)

Prototype:

  int *GMMergeFindSimilarPoints(IrtRType *VecPts,
                                int PtLen,
                                int VecLen,
                                IrtRType Tolerance)


Description:


Finds out similar (to Tolerance) points in the given vector of points of length VecLen. Returned is a newly allocated vector VecIdx of length VecLen so VecIdx[i] = j means point i is the same as point j.

Parameters:

VecPts: Vector of points to seek similarities.
PtLen: Number of real valued coordinates in point (2 for E2, 4 for P3, etc.).
VecLen: Length of VecPts. VecPts should have PtLen * VecLen reals.
Tolerance: To consider two points the same, in L^2 norm.


Returned Value:

int *: The dynamically allocated vector of indices, so that VecIdx[i] = j means i and j are the same.


See Also:

GMMergeSameGeometry

Keywords:

merge


GMMergeGeometry

(merge.c:474)

Prototype:

  int GMMergeGeometry(void **GeomEntities,
                      int NumOfGEntities,
                      IrtRType Eps,
                      IrtRType IdenticalEps,
                      VoidPtr GenericData,
                      GMMergeGeomInitFuncType InitFunc,
                      GMMergeGeomDistFuncType DistSqrFunc,
                      GMMergeGeomKeyFuncType *KeyFuncs,
                      GMMergeGeomMergeFuncType MergeFunc)


Description:

Merges separated geometric entities into longer ones, in place, as much as possible. Given a list of entities (typically points or polylines), find and merge closest ones as possible and in place.

Parameters:

GeomEntities: Geometry to merge, typically points or polylines, as a vector of reference pointers to the entities. Returned, merged, data will also be stored here.
NumOfGEntities: Number of geometric entities. Also length of GeomEntities.
Eps: Epsilon of similarity to merge entities at. Entities farther than Eps will not be merged.
IdenticalEps: Epsilon to consider two entities' distance as zero.
GenericData: Optional (can be NULL) data to transfer to all call back functions.
InitFunc: A function to initialize all geometry. NULL for the initialization of IPPolygonStruct polylines.
DistSqrFunc: A distance computation function. NULL for two IPPolygonStruct polylines compare. This function computes the minimal distance squared between two entities.
KeyFuncs: A NULL terminated version of functions to return a Key to sort the entities so that similar/adjacent entities will get a similar Key. A polyline, for example, can have two Key functions of its two end points (to be merged).
MergeFunc: A merge function. NULL to merge two IPPolygonStructs polylines merge. This function returns a merged entity while destroying the two input entities.


Returned Value:

int: Number of merged entities in the end or 0 if error.


See Also:

MvarPolyMergePolylines GMMergePolylines GMMergeSameGeometry

Keywords:

merge points polylines


GMMergePolylines

(poly_pts.c:911)

Prototype:

  IPPolygonStruct *GMMergePolylines(IPPolygonStruct *Polys, IrtRType Eps)


Description:

Merges separated polylines into longer ones, in place, as possible. Given a list of polylines, matches end points and merged as possible polylines with common end points, in place.

Parameters:

Polys: Polylines to merge, in place.
Eps: Epsilon of similarity to merge points at.


Returned Value:

IPPolygonStruct *: Merged as possible polylines.


See Also:

GMMergeGeometry MvarPolyMergePolylines GMMergePolylines2

Keywords:

merge polyline


GMMergeSameGeometry

(merge.c:308)

Prototype:

  int GMMergeSameGeometry(void **GeomEntities,
                          int NumOfGEntities,
                          IrtRType IdenticalEps,
                          VoidPtr GenericData,
                          GMMergeGeomInitFuncType InitFunc,
                          GMMergeGeomDistFuncType DistSqrFunc,
                          GMMergeGeomKeyFuncType *KeyFuncs,
                          GMMergeGeomMergeFuncType MergeFunc)


Description:

Merges separated geometric entities into longer ones, in place, as much as possible. Given a list of entities (typically points or polylines), find and merge closest ones as possible and in place. This function should only be used to merge geometry that is very precise and adjacent entities distance is very small.

Parameters:

GeomEntities: Geometry to merge, typically points or polylines, as a vector of reference pointers to the entities. Returned, merged, data will also be stored here.
NumOfGEntities: Number of geometric entities. Also length of GeomEntities.
IdenticalEps: Epsilon to consider two entities' distance as zero. This epsilon is typically very small, i.e., IRIT_UEPS.
GenericData: Optional (can be NULL) data to transfer to all call back functions.
InitFunc: A function to initialize all geometry. NULL for the initialization of IPPolygonStruct polylines.
DistSqrFunc: A distance computation function. NULL for two IPPolygonStruct polylines compare. This function computes the minimal distance squared between two entities.
KeyFuncs: Two function to return two Keys to sort the entities so that similar/adjacent entities will get similar a Key. For example for a polyline, they will return a key related to the two end points of the polyline.
MergeFunc: A merge function. NULL to merge two IPPolygonStructs polylines merge. This function destroys the two input entities and returns the merged entity in the first reference, setting the second reference to NULL.


Returned Value:

int: Number of merged entities in the end or 0 if error.


See Also:

GMMergeGeometry

Keywords:




GMMinSpanCirc

(ms_circ.c:65)

Prototype:

  int GMMinSpanCirc(IrtE2PtStruct *DTPts,
                    int NumOfPoints,
                    IrtE2PtStruct *Center,
                    IrtRType *Radius)


Description:

Minimum spanning circle (MSC) computation of a set of points. Algorithm is based on Section 4.7 of "Computational Geometry, Algorithms and Applications" by M. de Berg et. al.

Parameters:

DTPts: The set of point to compute their MSC.
NumOfPoints: Number of points in set DTPts.
Center: Of computed MSC.
Radius: Of computed MSC.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanCone

Keywords:

minimum spanning circle


GMMinSpanCone

(ms_circ.c:284)

Prototype:

  int GMMinSpanCone(IrtVecType *DTVecs,
                    int VecsNormalized,
                    int NumOfVecs,
                    IrtVecType ConeAxis,
                    IrtRType *ConeAngle)


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:

DTVecs: The set of vectors to compute their MSC.
VecsNormalized: TRUE if vectors are normalized, FALSE otherwise.
NumOfVecs: Number of vectors in set DTVecs.
ConeAxis: Of computed MSC.
ConeAngle: Of computed MSC, in radians.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanCirc GMMinSpanConeAvg

Keywords:




GMMinSpanConeAvg

(ms_circ.c:215)

Prototype:

  int GMMinSpanConeAvg(IrtVecType *DTVecs,
                       int VecsNormalized,
                       int NumOfVecs,
                       IrtVecType ConeAxis,
                       IrtRType *ConeAngle)


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:

DTVecs: The set of vectors to compute their MSC.
VecsNormalized: TRUE if vectors are normalized, FALSE otherwise.
NumOfVecs: Number of vectors in set DTVecs.
ConeAxis: Of computed MSC.
ConeAngle: Of computed MSC, in radians.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanCirc GMMinSpanCone

Keywords:




GMMinSpanSphere

(ms_spher.c:60)

Prototype:

  int GMMinSpanSphere(IrtE3PtStruct *DTPts,
                      int NumOfPoints,
                      IrtE3PtStruct *Center,
                      IrtRType *Radius)


Description:

Minimum spanning sphere (MSS) computation of a set of points.

Parameters:

DTPts: The set of point to compute their MSS.
NumOfPoints: Number of points in set DTPts.
Center: Of computed MSS.
Radius: Of computed MSS.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanCirc

Keywords:

minimum spanning sphere


GMMonotonePolyConvex

(cnvxhull.c:347)

Prototype:

  int GMMonotonePolyConvex(IPVertexStruct *VHead, int Cnvx)


Description:

Compute the convex (concave) envelope of an X-monotone shape, in the XY plane, by purging all concave (convex) vertices in the sequence, in place.

Parameters:

VHead: An X-monotone polyline to make into a convex (concave) one. Note the first and last vertices will always be in the output sequence.
Cnvx: TRUE to make the vertex sequence Vhead convex, FALSE to make it concave, in the functional sense.


Returned Value:

int: TRUE if succesful, FALSE otherwise.


See Also:

GMConvexHull

Keywords:




GMObjectNumCoordinates

(geomat3d.c:774)

Prototype:

  int GMObjectNumCoordinates(const IPObjectStruct *Obj)


Description:

Computes the number of dimensions the given object has, based on the sub-object found with the hiest dimension.

Parameters:

Obj: Object to figure its highest dimension.


Returned Value:

int: The computed (highest) dimension, or 0 if no geometry was found.


See Also:



Keywords:




GMOrthogonalVector

(geom_bsc.c:391)

Prototype:

  int GMOrthogonalVector(const IrtVecType V, IrtVecType OV, int UnitLen)


Description:

Computes an orthogonal vector in R^3 to the given vector.

Parameters:

V: Input vector to find an orthogonal vector for.
OV: utput newly computed orthogonal (possibly unit) vector to V, in R^3.
UnitLen: If TRUE, normalize the outpt vector.


Returned Value:

int: TRUE if successful, FALSE otherwise.


Keywords:




GMPlCrvtrSetCurvatureAttr

(plycrvtr.c:55)

Prototype:

  void GMPlCrvtrSetCurvatureAttr(IPPolygonStruct *PolyList,
                                 int NumOfRings,
                                 int EstimateNrmls)


Description:

Estimates the Gaussian and Mean curvature values for the given triangular regular mesh and initializes the corresponding attributes: for each vertex: "K1Curv", "K2Curv", "D1", "D2" and "K" and "H". Uses a least sqaures osculating quadratic function in the estimate. Mesh is assumed to be a triangular regular mesh.

Parameters:

PolyList: The triangular two-manifold mesh data.
NumOfRings: Number of rings around a vertex in the paraboloid fitting.
EstimateNrmls: If TRUE estimate normals to the vertices on the fly. This functions needs these normals for its proper work.


Returned Value:

void


See Also:

GMPlCrvtrSetFitDegree SymbEvalSrfCurvPrep SymbEvalSrfCurvature

Keywords:




GMPlCrvtrSetFitDegree

(plycrvtr.c:305)

Prototype:

  int GMPlCrvtrSetFitDegree(int UseCubic)


Description:

Sets the degree for the continuous function we fit at the vertex.

Parameters:

UseCubic: TRUE to use cubic fit, FALSE for a quadratic


Returned Value:

int: Old value of fitting degree.


See Also:

GMPlCrvtrSetCurvatureAttr

Keywords:




GMPlSilImportanceAttr

(plyimprt.c:34)

Prototype:

  void GMPlSilImportanceAttr(IPPolygonStruct *PolyList)


Description:

Estimates the importance of vertices of a polygonal mesh based on the probability of their adjacent edges to posses silhouettes. Mesh is assumed to be a triangular regular mesh. Each vertex in the mesh is assigned a new "SilImp" attribute which is a positive value.

Parameters:

PolyList: The triangular two-manifold mesh data.


Returned Value:

void


See Also:

GMPlCrvtrSetCurvatureAttr

Keywords:




GMPlSilImportanceRange

(plyimprt.c:235)

Prototype:

  IPPolygonStruct *GMPlSilImportanceRange(IPPolygonStruct *PolyList)


Description:

Extract the silhouette importance range of a polygonal mesh with "SilImp" attribute. See also GMPlSilImportanceAttr. Mesh is assumed to be a triangular regular mesh.

Parameters:

PolyList: The triangular two-manifold mesh data.


Returned Value:

IPPolygonStruct *: the extracted geometry.


See Also:

GMPlSilImportanceAttr

Keywords:




GMPlanarVecVecAngle

(geom_bsc.c:237)

Prototype:

  IrtRType GMPlanarVecVecAngle(const IrtVecType V1,
                               const IrtVecType V2,
                               int Normalize)


Description:

Compute the angle between two planar vectors V1 and V2. Angle is zero if V2 is in the exact same direction as V1, negative if V2 turns right and positive if V2 turns left. Angle is returned in degrees in the domain of (-180, +180]. Only the XY coefficients of V1 and V2 are considered.

Parameters:

V1, V2: Planar vectors to compute their relative angle, in degrees.
Normalize: RUE if vectors need normalization first, FALSE if unit size.


Returned Value:

IrtRType: Angle between V1 and V2, in degree.


Keywords:




GMPlaneFrom3Points

(geom_bsc.c:755)

Prototype:

  int GMPlaneFrom3Points(IrtPlnType Plane,
                         const IrtPtType Pt1,
                         const IrtPtType Pt2,
                         const IrtPtType Pt3)


Description:

Routine to construct the plane from given 3 points. If two of the points are the same or the three points are collinear it returns FALSE, otherwise (successful), it returns TRUE.

Parameters:

Plane: To compute.
Pt1, Pt2, Pt3: Three points to fit a plane through.


Returned Value:

int: TRUE if successful, FALSE otherwise.


Keywords:

plane


GMPointCoverOfPolyObj

(poly_cvr.c:42)

Prototype:

  IPObjectStruct *GMPointCoverOfPolyObj(IPObjectStruct *PolyObj,
                                        int n,
                                        IrtRType *Dir,
                                        char *PlAttr)


Description:

Computes a uniform distribution of points on a polygonal object. If an "Imprt" attribute is found in a polygon then it is used to weigh the importance of this polygon and hence the number of points that will be allocated to (on) it.

Parameters:

PolyObj: Object to compute a uniform point distribution on.
n: Number of points to distribute (estimate).
Dir: If given - use it as view dependent uniform distribution. Note that if Dir != NULL less than n points will be generated.
PlAttr: If not NULL, the created points are placed as attributes named PlAttr in each polygon in the return (copied) model.


Returned Value:

IPObjectStruct *: A point list object.


Keywords:




GMPointCoverOfUnitHemiSphere

(sph_pts.c:30)

Prototype:

  IPObjectStruct *GMPointCoverOfUnitHemiSphere(IrtRType HoneyCombSize)


Description:

Computes a honey comb distribution of points on a sphere. Result is an approximation.

Parameters:

HoneyCombSize: Size of honey comb, on the unit sphere. A fraction.


Returned Value:

IPObjectStruct *: A point list object.


Keywords:




GMPointFrom3Planes

(geom_bsc.c:1292)

Prototype:

  int GMPointFrom3Planes(const IrtPlnType Pl1,
                         const IrtPlnType Pl2,
                         const IrtPlnType Pl3,
                         IrtPtType Pt)


Description:

Find the intersection point (if exists) of three planes.

Parameters:

Pl1, Pl2, Pl3: Three planes to consider.
Pt: Intersection point found (if any).


Returned Value:

int: TRUE if exists an intersection point, FALSE otherwise.


Keywords:




GMPointFromLinePlane

(geom_bsc.c:1037)

Prototype:

  int GMPointFromLinePlane(const IrtPtType Pl,
                           const IrtPtType Vl,
                           const IrtPlnType Plane,
                           IrtPtType InterPoint,
                           IrtRType *t)


Description:

Routine to find the intersection point of a line and a plane (if any). The Plane is prescribed using four coefficients : Ax + By + Cz + D = 0 given as four elements vector. The line is define via a point on it Pl and a direction vector Vl. Returns TRUE only if such point exists.

Parameters:

Pl, Vl: Position and direction that defines the line.
Plane: To find the intersection with the line.
InterPoint: Where the intersection occurred.
t: Parameter along the line of the intersection location (as Pl + Vl * t).


Returned Value:

int: TRUE, if successful.


Keywords:

line plane intersection


GMPointFromLinePlane01

(geom_bsc.c:1090)

Prototype:

  int GMPointFromLinePlane01(const IrtPtType Pl,
                             const IrtPtType Vl,
                             const IrtPlnType Plane,
                             IrtPtType InterPoint,
                             IrtRType *t)


Description:

Routine to find the intersection point of a line and a plane (if any). The Plane is prescribed using four coefficients : Ax + By + Cz + D = 0 given as four elements vector. The line is define via a point on it Pl and a direction vector Vl. Returns TRUE only if such point exists. this routine accepts solutions only for t between zero and one.

Parameters:

Pl, Vl: Position and direction that defines the line.
Plane: To find the intersection with the line.
InterPoint: Where the intersection occurred.
t: Parameter along the line of the intersection location (as Pl + Vl * t).


Returned Value:

int: TRUE, if successful and t between zero and one.


Keywords:

line plane intersection


GMPointFromPlanarLineLine

(geom_bsc.c:1153)

Prototype:

  int GMPointFromPlanarLineLine(const IrtPtType Pl1,
                                const IrtPtType Vl1,
                                const IrtPtType Pl2,
                                const IrtPtType Vl2,
                                IrtPtType Pi,
                                IrtRType *t1,
                                IrtRType *t2)


Description:

Routine to find the intersection point Pi on the two coplanar lines (Pli, Vli), i = 1, 2. This function returns TRUE iff the two lines are not parallel! Solved as the solution of the following two linear equations:
   Vl1(x) t1 - Vl2(x) t2 = Pl2(x) - Pl1(x)
   Vl1(y) t1 - Vl2(y) t2 = Pl2(y) - Pl1(y)


Parameters:

Pl1, Vl1: Position and direction defining the first line.
Pl2, Vl2: Position and direction defining the second line.
Pi: Intersection point if lines are not parallel.
t1: Parameter value of Pi as (Pl1 + Vl1 * t1).
t2: Parameter value of Pi as (Pl2 + Vl2 * t2).


Returned Value:

int: TRUE, if successful.


See Also:

GM2PointsFromLineLine

Keywords:

line line intersection


GMPointFromPointLine

(geom_bsc.c:808)

Prototype:

  IrtRType GMPointFromPointLine(const IrtPtType Point,
                                const IrtPtType Pl,
                                const IrtPtType Vl,
                                IrtPtType ClosestPoint)


Description:


Routine to compute the closest point on a given 3d line to a given 3d point. The line is prescribed using a point on it (Pl) and vector (Vl).

Parameters:

Point: To find the closest to on the line.
Pl, Vl: Position and direction that defines the line. Vl need not be a unit length vector.
ClosestPoint: Where closest point found on the line is to be saved.


Returned Value:

IrtRType: Parameter along the line where if the closest point is Pl equal zero and if closest point is Pl + Vl equal one. In other words, the closest point is on the finite line segment for return value in [0, 1].


See Also:

MvarPointFromPointLine

Keywords:

point line distance


GMPointFromPointPlane

(geom_bsc.c:986)

Prototype:

  int GMPointFromPointPlane(const IrtPtType Pt,
                            const IrtPlnType Plane,
                            IrtPtType ClosestPoint)


Description:

Routine to compute the closest point on a given plane to a given 3d point. The Plane is prescribed using four coefficients : Ax + By + Cz + D = 0 given as four elements vector.

Parameters:

Pt: Point to find closest point on Plane to.
Plane: To find the closest point on to Pt.
ClosestPoint: Where the closest point on Plane to Pt is.


Returned Value:

int: TRUE, if successful.


Keywords:

point plane distance


GMPointInsideCnvxPolygon

(geomat3d.c:1525)

Prototype:

  int GMPointInsideCnvxPolygon(const IrtPtType Pt, const IPPolygonStruct *Pl)


Description:

Test if a given points is contained in the given convex polygon.

Parameters:

Pt: Point to test for inclusion in convex polygon Pl. Pt is assumed to be on the plane holding polygon Pl.
Pl: Convex polygon to test for inclusion of Pt.


Returned Value:

int: TRUE if Pt is inside Polygon Pl, FALSE otherwise.


See Also:

GMPointOnPolygonBndry

Keywords:




GMPointOnPolygonBndry

(geomat3d.c:1574)

Prototype:

  int GMPointOnPolygonBndry(const IrtPtType Pt,
                            const IPPolygonStruct *Pl,
                            IrtRType Eps)


Description:

Test if a given points is on the boundary of the given polygon.

Parameters:

Pt: Point to test for inclusion in the boundary of polygon Pl. Pt is assumed to be on the plane holding polygon Pl.
Pl: Polygon to test for inclusion of Pt.
Eps: Maximal distance from the boundary to be considered on boundary.


Returned Value:

int: TRUE if Pt is on the boundary of Polygon Pl, FALSE otherwise.


See Also:

GMPointInsideCnvxPolygon

Keywords:




GMPointVecFromLine

(geom_bsc.c:719)

Prototype:

  void GMPointVecFromLine(const IrtLnType Line, IrtPtType Pt, IrtVecType Dir)


Description:

Computes a point on and the direction of the given line

Parameters:

Line: To extract and point and a direction for.
Pt: A point on line Line.
Dir: The direction of line Line.


Returned Value:

void


Keywords:




GMPolyAdjacncyFree

(plystrct.c:393)

Prototype:

  void GMPolyAdjacncyFree(VoidPtr PolyAdj)


Description:

Free the adjacency data structure associated with a polygonal model.

Parameters:

PolyAdj: Data struct to free, as constructed by GMPolyAdjacncyGen.


Returned Value:

void


See Also:

GMPolyAdjacncyGen GMPolyAdjacncyVertex

Keywords:




GMPolyAdjacncyGen

(plystrct.c:175)

Prototype:

  VoidPtr GMPolyAdjacncyGen(IPObjectStruct *PObj, IrtRType EqlEps)


Description:

Constructs an adjacency information data structure for the given polygonal mesh in GMPolyAdjStruct: VList: A list of vertices and for each all edges using the vertex. EList: A list of edges, each referencing the two vertices using it. PObj: A reference to the original model.

Parameters:

PObj: A polygonal mesh to compute adjacency information for.
EqlEps: Epsilon for point equality.


Returned Value:

VoidPtr: A reference to the data structure holding the adjacency info.


See Also:

GMPolyAdjacncyVertex GMPolyAdjacncyFree

Keywords:




GMPolyAdjacncyVertex

(plystrct.c:336)

Prototype:

  void GMPolyAdjacncyVertex(IPVertexStruct *V,
                            VoidPtr PolyAdj,
                            GMPolyAdjacncyVertexFuncType AdjVertexFunc)


Description:

Get the adjacency information of a vertex - all the edges that share it. Invokes the given call back function on all edges.

Parameters:

V: Vertex to find all edges that share it.
PolyAdj: Data struct to use, as constructed by GMPolyAdjacncyGen.
AdjVertexFunc: Call be function to invoke on every edge.


Returned Value:

void


See Also:

GMPolyAdjacncyGen GMPolyAdjacncyFree

Keywords:




GMPolyCentroid

(geomvals.c:66)

Prototype:

  int GMPolyCentroid(const IPPolygonStruct *Pl, IrtPtType Centroid)


Description:

Computes the centroid of a poly, as an average of all input vertices.

Parameters:

Pl: The poly to compute its centroid.
Centroid: Computed center point. Note it can be outside Pl!


Returned Value:

int: TRUE if at least one vertex in input Pl, FALSE otherwise.


See Also:

GMComputeAverageVertex

Keywords:




GMPolyHasCollinearEdges

(poly_pts.c:221)

Prototype:

  int GMPolyHasCollinearEdges(const IPPolygonStruct *Pl)


Description:

Examines if the given polygons has collinear edges (three consecutive vertices that are collinear).

Parameters:

Pl: Polygon to examine for collinear edges.


Returned Value:

int: TRUE if Pl has collinear edges, FALSE otherwise.


See Also:



Keywords:




GMPolyHierarchy2SimplePoly

(geom_bsc.c:2335)

Prototype:

  IPPolygonStruct *GMPolyHierarchy2SimplePoly(IPPolygonStruct *Root,
                                              IPPolygonStruct *Islands)


Description:

Converts a root polygons with islands into a closed, simple, polygon. Interior islands are all connected into the root, outer, polygon. The outer, root, loop is assumed to be oriented in opposite direction to the islands.

Parameters:

Root: The top most, outer polygon.
Islands: Interior islands to connected with root into one simply poly.


Returned Value:

IPPolygonStruct *: Merged poly.


Keywords:

polygonization islands holes


GMPolyLength

(geomvals.c:33)

Prototype:

  IrtRType GMPolyLength(const IPPolygonStruct *Pl)


Description:

Computes the lengths of a poly, first vertex to last vertex.

Parameters:

Pl: he poly to compute its length.


Returned Value:

IrtRType: The length of the poly(line).


Keywords:




GMPolyMeshSmoothing

(polysmth.c:84)

Prototype:

  IPObjectStruct *GMPolyMeshSmoothing(IPObjectStruct *PolyObj,
                                      const IPPolygonStruct *VerticesToRound,
                                      int AllowBndryMove,
                                      IrtRType RoundingRadius,
                                      int NumIters,
                                      IrtRType BlendFactor,
                                      int CurvatureLimits)


Description:

Move designated Vertices (that are typically not on the boundary) of the polygons in PolyObj to new (averages of their 1-rings) positions, smoothing the shape of the mesh.

Parameters:

PolyObj: Polygonal object to smooth, in place.
VerticesToRound: f not NULL, only vertices found in VerticesToRound are allowed to move and other vertices are kept stationary.
AllowBndryMove: to keep boundary vertices fixed, 1 to allow the boundary vertices to move only in the plane containing the boundary, -1 to allow the boundary vertices to freely move.
RoundingRadius: If we have a restriction on the movable vertices any other vertex that is at a Euclidean distance of less than RoundingRadius from a restricted vertex will also be tagged as such.
NumIters: Number of times to perform this smoothing algorithm.
BlendFactor: .0 to move the vertex all the way to average position. Otherwise, (less than 1.0) to the proper fraction.
CurvatureLimits: If TRUE, estimate the curvature and make sure we are within the desired rounding radius. Available only for meshes with triangles only.


Returned Value:

IPObjectStruct *: The smoothed out polygons, in place. Same as PolyObj.


Keywords:




GMPolyObjectArea

(geomvals.c:121)

Prototype:

  IrtRType GMPolyObjectArea(const IPObjectStruct *PObj, int SignedArea)


Description:

Routine to evaluate the Area of the given geom. object, in object unit.
Algorithm (for each polygon):                                 V3
1. Set Polygon Area to be zero.                              /\
   Make a copy of the original polygon                     /    \
   and transform it to a XY parallel plane.              /        \V2
   Find the minimum Y value of the polygon           V4/           |
   in the XY plane.                                    \           |
2. Let V(0) be the first vertex, V(n) the last one.      \         |
   For i goes from 0 to n-1 add to Area the area           \_______|
   below edge V(i), V(i+1):                                V0      V1
   PolygonArea += (V(i+1)x - V(i)x) * (V(i+1)y' - V(i)y') / 2
   where V(i)y' is V(i)y - MinY, where MinY is polygon minimum Y value.
3. The result of step 2 is the area of the polygon itself.
   However, it might be negative, so take the absolute result of step 2
   and add it to the global ObjectArea.

Note step 2 is performed by another auxiliary routine: GMPolyOnePolyXYArea.

Parameters:

PObj: A polyhedra object to compute its surface area.
SignedArea: True for sign area, FALSE always positive.


Returned Value:

IrtRType: The area of object PObj.


See Also:

GMPolyOnePolyArea

Keywords:

area


GMPolyObjectVolume

(geomvals.c:284)

Prototype:

  IrtRType GMPolyObjectVolume(const IPObjectStruct *PObj)


Description:

Routine to evaluate the Volume of the given geom object, in object unit. This routine has a side effect that all non-convex polygons will be splitted to convex ones. Algorithm (for each polygon, and let ObjMinY be the minimum OBJECT Y):
                                                              V3
1. Set Polygon Area to be zero.                              /\
   Let V(0) be the first vertex, V(n) the last.            /    \
   For i goes from 1 to n-1 form triangles               /        \V2
                  by V(0), V(i), V(i+1).             V4/           |
   For each such triangle di:                          \           |
   1.1. Find the vertex (out of V(0), V(i), V(i+1))      \         |
        with the minimum Z - TriMinY.                      \_______|
   1.2. The volume below V(0), V(i), V(i+1) triangle,      V0      V1
        relative to ObjMinZ level, is the sum of:
        1.2.1. volume of V'(0), V'(i), V'(i+1) - the
               area of projection of V(0), V(i), V(i+1) on XY parallel
               plane, times (TriMinZ - ObjMinZ).
        1.2.2. Assume V(0) is the one with the PolyMinZ. Let V"(i) and
               V"(i+1) be the projections of V(i) and V(i+1) on the plane
               Z = PolyZMin. The volume above 1.2.1. and below the polygon
               (triangle!) will be: the area of quadraliteral V(i), V(i+1),
               V"(i+1), V"(i), times distance of V(0) for quadraliteral
               plane divided by 3.
   1.3. If Z component of polygon normal is negative add 1.2. result to
        ObjectVolume, else subtract it.


Parameters:

PObj: To compute volume for.


Returned Value:

IrtRType: Computed volume.


Keywords:

volume


GMPolyOffset

(polyofst.c:83)

Prototype:

  IPPolygonStruct *GMPolyOffset(const IPPolygonStruct *Poly,
                                int IsPolygon,
                                IrtRType Ofst,
                                GMPolyOffsetAmountFuncType AmountFunc)


Description:


Computes the offset of a given polygon/line in the XY plane by Ofst.

Parameters:

Poly: To compute its offset in the XY plane.
IsPolygon: TRUE for a polygon, FALSE for a polyline.
Ofst: Amount of offset.
AmountFunc: Scale the offset amount according to this function. A NULL here will use a constant scaling factor of one.


Returned Value:

IPPolygonStruct *: Offset of Poly by Ofst amount.


See Also:

GMPolyOffsetAmountDepth GMPolyOffset3D

Keywords:




GMPolyOffset3D

(polyofst.c:182)

Prototype:

  IPPolygonStruct *GMPolyOffset3D(const IPPolygonStruct *Poly,
                                  IrtRType Ofst,
                                  int ForceSmoothing,
                                  IrtRType MiterEdges,
                                  GMPolyOffsetAmountFuncType AmountFunc)


Description:

Computes the offset of a given polygon object in R^3 by Ofst. Computation is done by moving all vertices in the nomal direction by ofst amount. If Poly does not contain vertex normals, they are estimated.

Parameters:

Poly: To compute its offset in R^3.
Ofst: Amount of offset.
ForceSmoothing: True to force normal smoothing.
MiterEdges: Positive to properly handle dihedral angle, in which case sets the maximal scale allowed. Zero to disable.
AmountFunc: Scale the offset amount according to this function. A NULL here will use a constant scaling factor of one.


Returned Value:

IPPolygonStruct *: Offset of Poly by Ofst amount.


See Also:

GMPolyOffsetAmountDepth GMPolyOffset

Keywords:




GMPolyOffsetAmountDepth

(polyofst.c:55)

Prototype:

  IrtRType GMPolyOffsetAmountDepth(const IrtRType *Coord)


Description:

Sets the offset amount to be a function of the depth Z value by scaling with 1/Z.

Parameters:

Coord: Of point as XYZ values.


Returned Value:

IrtRType: scaling factor of offset amount.


See Also:

GMPolyOffset

Keywords:




GMPolyOnePolyArea

(geomvals.c:157)

Prototype:

  IrtRType GMPolyOnePolyArea(const IPPolygonStruct *Pl, int SignedArea)


Description:

Computes the area of a single polygon.

Parameters:

Pl: To compute its area.
SignedArea: True for sign area, FALSE always positive.


Returned Value:

IrtRType: Area of polygon Pl.


See Also:

GMPolyObjectArea GMPolyOnePolyXYArea

Keywords:




GMPolyOnePolyXYArea

(geomvals.c:213)

Prototype:

  IrtRType GMPolyOnePolyXYArea(const IPVertexStruct *VHead, int SignedArea)


Description:

Routine to evaluate the area of the given polygon projected on the XY plane. The polygon does not have to be on a XY parallel plane, as only its XY projection is considered (Z is ignored). Returned the area of its XY parallel projection. See GMObjectArea above for algorithm.

Parameters:

VHead: Of vertex list to compute area for.
SignedArea: True for sign area, FALSE always positive.


Returned Value:

IrtRType: Computed area.


See Also:

GMPolyObjectArea

Keywords:




GMPolyPlaneClassify

(geom_bsc.c:1803)

Prototype:

  IrtRType GMPolyPlaneClassify(const IPPolygonStruct *Pl, const IrtPlnType Pln)


Description:

Classify a plane as (mostly) on the positive side of the plane, returning a positive value, or (mostly) on the negative side of the plane, returning a negative value.

Parameters:

Pl: Polygon to consider and classify.
Pln: Plane to claassify against.


Returned Value:

IrtRType: Positive or negative, classifying the polygon's side.


Keywords:




GMPolyPropFetch

(polyprop.c:304)

Prototype:

  IPPolygonStruct *GMPolyPropFetch(IPPolygonStruct *Pls,
                                   GMFetchVertexPropertyFuncType VertexProperty,
                                   IrtRType ConstVal,
                                   void *AuxData)


Description:

Computes the constant value over a polygonal model by processing each polygons for edges that the values of the property are begin crossed. The input polygonal model is assumed to hold triangles only.

Parameters:

Pls: The polygons to process the constant value property for. Assumed to hold triangles only.
VertexProperty: call back function to return the desired property for the invoked vertex.
ConstVal: Constant value of property sought.
AuxData: to optionally pass to the VertexProperty call back func.


Returned Value:

IPPolygonStruct *: List of polylines on the polygons for which the property assumes the value ConstVal.


See Also:

GMPolyPropFetchIsophotes GMPolyPropFetchCurvature GMFetchVertexPropertyFuncType

Keywords:




GMPolyPropFetchAttribute

(polyprop.c:95)

Prototype:

  IPPolygonStruct *GMPolyPropFetchAttribute(IPPolygonStruct *Pls,
                                            IPAttrIDType AttrID,
                                            IrtRType Value)


Description:

A function to derive curves over a polygonal model, Pls, based on given prescribed attribute PropAttr.

Parameters:

Pls: The polygons to process the constant value property for. Assumed to hold triangles only.
AttrID: ID of attribute to extract.
Value: Value of property to seek.


Returned Value:

IPPolygonStruct *: List of polylines on the polygons along the requested property value.


See Also:

GMPolyPropFetchIsophotes GMPolyPropFetchCurvature

Keywords:




GMPolyPropFetchCurvature

(polyprop.c:227)

Prototype:

  IPPolygonStruct *GMPolyPropFetchCurvature(IPPolygonStruct *Pls,
                                            int CurvatureProperty,
                                            int NumOfRings,
                                            IrtRType CrvtrVal)


Description:

A function to derive curvature properties for a polygonal model, Pls.

Parameters:

Pls: The polygons to process the constant value property for. Assumed to hold triangles only.
CurvatureProperty: for Gaussian curvature, 1 for Mean curvature.
NumOfRings: In the paraboloid fit estimation, usually 1-2.
CrvtrVal: Value of curvature property to seek.


Returned Value:

IPPolygonStruct *: List of polylines on the polygons along the requested curvature lines.


See Also:

GMPolyPropFetchIsophotes GMPolyPropFetchAttribute

Keywords:




GMPolyPropFetchIsophotes

(polyprop.c:156)

Prototype:

  IPPolygonStruct *GMPolyPropFetchIsophotes(IPPolygonStruct *Pls,
                                            const IrtVecType ViewDir,
                                            IrtRType InclinationAngle)


Description:

A function to derive isophotes for a polygonal model, Pls.

Parameters:

Pls: The polygons to process the constant value property for. Assumed to hold triangles only.
ViewDir: Direction of view.
InclinationAngle: In degrees to consider the isophotes for. 90 degrees would yield regular silhouettes viewed from LightDir.


Returned Value:

IPPolygonStruct *: List of polylines on the polygons along the requested isophotes.


See Also:

GMPolyPropFetchCurvature GMPolyPropFetchAttribute

Keywords:




GMPolygonPlaneInter

(geom_bsc.c:1665)

Prototype:

  int GMPolygonPlaneInter(const IPPolygonStruct *Pl,
                          const IrtPlnType Pln,
                          IrtRType *MinDist)


Description:

Test if the given polygon intersects the given plane.

Parameters:

Pl: Polygon to test if interestes plane Pln.
Pln: Plane to examine if polygon Pl intersects. Assumed normalized normal vector in Pln.
MinDist: eturns closest vertex in Pl to Pln.


Returned Value:

int: TRUE if intersects, FALSE otherwise.


See Also:

GMPolygonRayInter GMSplitPolygonAtPlane

Keywords:




GMPolygonPointInclusion

(geom_bsc.c:1884)

Prototype:

  int GMPolygonPointInclusion(const IPPolygonStruct *Pl,
                              const IrtPtType Pt,
                              IrtRType OnBndryEps)


Description:

Routine to check if a point is inside a polygon, in the XY plane. Uses winding number accumulation in the computation.

Parameters:

Pl: Polygon to test if Pt is in it.
Pt: Point to test for inclusion in Pl.
OnBndryEps: If not zero, will also check if Pt is on boundary to within this epsilon.


Returned Value:

int: 1 if Pt inside Pl, 0 if on boundary (if OnBndryEps > 0), -1 if Pt outside.


See Also:

GMPolygonPointInclusion3D GMPolygonPlaneInter GMPolygonRayInter

Keywords:

ray polygon intersection point inclusion


GMPolygonPointInclusion3D

(geom_bsc.c:2028)

Prototype:

  int GMPolygonPointInclusion3D(const IPPolygonStruct *Pl, const IrtPtType Pt)


Description:

Routine to check if a point is inside a polyhedra in 3D. Computes the accumulated Gaussian sphere area deviation of Pt-vertices over all triangles in the given Pl model, with respect to given point Pt. Each angular deviation of each triangle is measured as area of spherical triangle over the Gaussian sphere, formed from its three Pt-vertices dirs. A point is inside a simple closed polyhedra if the sum is +/-4 Pi, zero if the point is outside.

Parameters:

Pl: Polyhedra in 3D to test if Pt is in it.
Pt: Point to test for inclusion in Pl.


Returned Value:

int: TRUE if Pt inside Pl, FALSE otherwise.


See Also:

GMPolygonPointInclusion GMPolygonPlaneInter GMPolygonRayInter GMAreaSphericalTriangle

Keywords:

ray polygon intersection point inclusion


GMPolygonRayInter

(geom_bsc.c:2081)

Prototype:

  int GMPolygonRayInter(const IPPolygonStruct *Pl,
                        const IrtPtType PtRay,
                        int RayAxes)


Description:

Routine that implements "Jordan Theorem". Same as GMPolygonRayInter2 but does not return the first intersection info.

Parameters:

Pl: To compute "Jordan Theorem" for the given ray. Can be either a polygon or a closed polyline (first and last points of polyline are equal).
PtRay: Origin of ray.
RayAxes: Direction of ray. 0 for X, 1 for Y, etc.


Returned Value:

int: Number of intersections of ray with the polygon.


See Also:

GMPolygonPlaneInter GMPolygonPointInclusion GMSplitPolygonAtPlane

Keywords:

ray polygon intersection Jordan theorem


GMPolygonRayInter2

(geom_bsc.c:2153)

Prototype:

  int GMPolygonRayInter2(const IPPolygonStruct *Pl,
                         const IrtPtType PtRay,
                         int RayAxes,
                         IPVertexStruct **FirstInterV,
                         IrtRType *FirstInterP,
                         IrtRType *AllInters)


Description:

Routine that implements "Jordan Theorem": Fire a ray from a given point and find the number of intersections of a ray with the polygon, excluding the given point Pt (start of ray) itself, if on polygon boundary. The ray is fired in +X (Axes == 0) or +Y if (Axes == 1). Only the X/Y coordinates of the polygon are taken into account, i.e. the orthogonal projection of the polygon on an X/Y parallel plane (equal to polygon itself if on X/Y parallel plane...). Note that if the point is on polygon boundary, the ray should not be in its edge direction. Algorithm: 1. 1.1. Set NumOfIntersection = 0; 1.2. Find vertex V not on Ray level and set AlgState to its level (below or above the ray level). If none goto 3; 1.3. Mark VStart = V; 2. Do 2.1. While State(V) == AlgState do 2.1.1. V = V -> Pnext; 2.1.2. If V == VStart goto 3; 2.2. IntersectionMinX = IRIT_INFNTY; 2.3. While State(V) == ON_RAY do 2.3.1. IntersectionMin = IRIT_MIN(IntersectionMin, V -> Coord[Axes]); 2.3.2. V = V -> Pnext; 2.4. If State(V) != AlgState do 2.4.1. Find the intersection point between polygon edge VLast, V and the Ray and update IntersectionMin if lower than it. 2.4.2. If IntersectionMin is greater than Pt[Axes] increase the NumOfIntersection counter by 1. 2.5. AlgState = State(V); 2.6. goto 2.2. 3. Return NumOfIntersection;

Parameters:

Pl: To compute "Jordan Theorem" for the given ray. Can be either a polygon or a closed polyline (first and last points of polyline are equal).
PtRay: Origin of ray.
RayAxes: Direction of ray. 0 for X, 1 for Y, etc.
FirstInterV: OUT - First intersection edge, between V and VNext.
FirstInterP: OUT - First intersection location, blending V and VNext.
AllInters: OUT - if not NULL, will be updated with a vector of all intersction locations. First entry must hold number of elements in this vector.


Returned Value:

int: Number of intersections of ray with the polygon.


See Also:

GMPolygonPlaneInter GMSplitPolygonAtPlane

Keywords:

ray polygon intersection Jordan theorem


GMPolygonRayInter3D

(geom_bsc.c:2284)

Prototype:

  int GMPolygonRayInter3D(const IPPolygonStruct *Pl,
                          const IrtPtType PtRay,
                          int RayAxes)


Description:

Same as GMPolygonRayInter but for arbitrary oriented polygon. The polygon is transformed into the XY plane and then GMPolygonRayInter is invoked on it.

Parameters:

Pl: To compute "Jordan Theorem" for the given ray.
PtRay: Origin of ray.
RayAxes: Direction of ray. 0 for X, 1 for Y, etc.


Returned Value:

int: Number of intersections of ray with the polygon.


Keywords:

ray polygon intersection Jordan theorem


GMPolygonalMorphosis

(pt_morph.c:32)

Prototype:

  IPPolygonStruct *GMPolygonalMorphosis(const IPPolygonStruct *Pl1,
                                        const IPPolygonStruct *Pl2,
                                        IrtRType t)


Description:

Computes a blend of the given two polyhedra as 't Pl1 + (1-t) Pl2'. The two polyhedra are assumed to be of the same topology: same number of (ordered) polygons and same number of vertices in each corresponding polygon.

Parameters:

Pl1, Pl2: The two polygonal object to meta-morph.
t: Linear blending factor: (1-t) * Pl1 + t * Pl2.


Returned Value:

IPPolygonStruct *: Blended polyhedra.


Keywords:




GMQuadAreaPerimeterRatioWeightFunc

(polyquad.c:466)

Prototype:

  IrtRType GMQuadAreaPerimeterRatioWeightFunc(const CagdPolylineStruct *P,
                                              const int *VIndices,
                                              int numV)


Description:

Returns the following quad weight function: function WF. * The used weight function is: (0.75 * QuadArea + 0.05 * QuadPerimeter + 0.10 * EdgesMaxMinRatio).

Parameters:

P: The polygon the quad is formed from its vertices.
VIndices: rray of indices if the vertices in Pl that forms the quad.
numV: Length of VIndices array.


Returned Value:

IrtRType: Value of the weight function described above.


Keywords:




GMQuadrangulatePolygon

(polyquad.c:541)

Prototype:

  struct IPPolygonStruct *GMQuadrangulatePolygon(const CagdPolylineStruct *Pl,
                                                 GMQuadWeightFuncType WF,
                                                 void *UserData)


Description:

Quadrangulates a closed polygon, by minimizing a given quad weight function WF. * The used weight function is: WF * (0.75 * QuadArea + 0.05 * QuadPerimeter + 0.10 * EdgesMaxMinRatio).

Parameters:

Pl: A polygon to quadrangulate.
WF: eight function of a quad. Invalid/undesired quads should have a negative weight, where in this case the weight of the quad is infinity.
UserData: ser data that can be used for the weight function.


Returned Value:

struct IPPolygonStruct *: List of quads (can contains triangles as well).


See Also:

GMQuadrangulatePolygon2

Keywords:




GMQuadrangulatePolygon2

(polyquad.c:614)

Prototype:

  struct IPPolygonStruct *GMQuadrangulatePolygon2(const struct IPPolygonStruct
                                                                            *Pl,
                                                  GMQuadWeightFuncType WF,
                                                  void *UserData)


Description:

Quadrangulates a closed polygon, by minimizing a given quad weight function WF. * The used weight function is: WF * (0.75 * QuadArea + 0.05 * QuadPerimeter + 0.10 * EdgesMaxMinRatio).

Parameters:

Pl: polygon to quadrangulate.
WF: eight function of a quad. Invalid/undesired quads should have a negative weight, where in this case the weight of the quad is infinity.
UserData: ser data that can be used for the weight function.


Returned Value:

struct IPPolygonStruct *: List of quads (can contains triangles as well).


See Also:

GMQuadrangulatePolygon

Keywords:




GMQuadrangulatePolygonList

(polyquad.c:650)

Prototype:

  struct IPPolygonStruct *GMQuadrangulatePolygonList(const struct
                                                       IPPolygonStruct *PlgnList,
                                                     GMQuadWeightFuncType WF,
                                                     void *UserData)


Description:

Quadrangulates a closed polygon, by minimizing a given quad weight function WF. The used weight function is: WF * (0.75 * QuadArea + 0.05 * QuadPerimeter + 0.10 * EdgesMaxMinRatio)

Parameters:

PlgnList: polygon list to quadrangulate.
WF: The weight function.
UserData: ser data that can be used for the weight function.


Returned Value:

struct IPPolygonStruct *: List of Quads (might contain triangles also).


See Also:

GMQuadrangulatePolygon2

Keywords:




GMQuatAdd

(quatrnn.c:231)

Prototype:

  void GMQuatAdd(GMQuatType q1, GMQuatType q2, GMQuatType QRes)


Description:

Adds two quatenrions.

Parameters:

q1: Left quaternion.
q2: Right quaternion.
QRes: Result quaternion.


Returned Value:

void


See Also:

GMQuatMatToQuat

Keywords:

Quaternion


GMQuatExp

(quatrnn.c:418)

Prototype:

  void GMQuatExp(IrtVecType SrcVec, GMQuatType DstQ)


Description:

Calculates the exponent quaternion of a vector.

Parameters:

SrcVec: Source vector.
DstQ: Detination (result) quaternion.


Returned Value:

void


See Also:

GMQuatLog

Keywords:

Quaternion


GMQuatInverse

(quatrnn.c:315)

Prototype:

  void GMQuatInverse(GMQuatType SrcQ, GMQuatType DstQ)


Description:

Creates q^(-1) from a quaternion.

Parameters:

SrcQ: Source quaternion.
DstQ: Destination inversed quaternion.


Returned Value:

void


See Also:

GMQuatNormalize GMQuatMatToQuat GMQuatIsUnitQuat

Keywords:

Quaternion


GMQuatIsUnitQuat

(quatrnn.c:257)

Prototype:

  int GMQuatIsUnitQuat(GMQuatType q)


Description:

Checks if a given quaternion is of unit magnitude.

Parameters:

q: Tested quaternion.


Returned Value:

int: Non-zero if TRUE.


See Also:

GMQuatMatToQuat GMQuatNormalize

Keywords:

Quaternion


GMQuatLog

(quatrnn.c:382)

Prototype:

  void GMQuatLog(GMQuatType SrcQ, IrtVecType DstVec)


Description:

Calculates the logarithm of a quaternion.

Parameters:

SrcQ: Source quaternion.
DstVec: Detination (result) vector.


Returned Value:

void


See Also:

GMQuatExp

Keywords:

Quaternion


GMQuatMatToQuat

(quatrnn.c:85)

Prototype:

  void GMQuatMatToQuat(IrtHmgnMatType Mat, GMQuatType q)


Description:

Transforms a matrix to a quaternion.

Parameters:

Mat: Source matrix.
q: Destination quaternion.


Returned Value:

void


See Also:

GMQuatToMat

Keywords:

Quaternion


GMQuatMatrixToAngles

(quatrnn.c:561)

Prototype:

  int GMQuatMatrixToAngles(IrtHmgnMatType Mat, IrtVecType *Vec)


Description:

Calculates the angle of rotation in each axis, from a given rotation matrix. The rotation, being axis-dependant, must be performed in a predefined order: rotate by X, then by Y and finally by Z. A rotation angle in the X-Y-Z order looks like this:
         c2*c3                c2*s3                 -s2             0
         s1*s2*c3 - c1*s3     s1*s2*s3 + c1*c3      s1*c2           0
         c1*s2*c3 + s1*s3     c1*s2*s3 - s1*c3      c1*c2           0
         0                    0                     0               1

 where c1 = cos x, c2 = cos y, c3 = cos z
       s1 = sin x, s2 = sin y, s3 = sin z

 This is compared to our matrix:
         a                    b                     c               0
         d                    e                     f               0
         g                    h                     i               0
         0                    0                     0               1


Parameters:

Mat: Source roation matrix.
Vec: Destination angles vectors (up to 8).


Returned Value:

int: The number of possible solutions (0 = no solution).


See Also:

GMQuatMatrixToScale GMQuatMatrixToTranslation

Keywords:




GMQuatMatrixToScale

(quatrnn.c:653)

Prototype:

  IrtRType GMQuatMatrixToScale(IrtHmgnMatType Mat)


Description:


Extract the uniform scale factor from a given transformation matrix.

Parameters:

Mat: Source transformation matrix.


Returned Value:

IrtRType: The uniform scale factor result.


See Also:

GMQuatMatrixToAngles GMQuatMatrixToTranslation

Keywords:




GMQuatMatrixToTranslation

(quatrnn.c:630)

Prototype:

  void GMQuatMatrixToTranslation(IrtHmgnMatType Mat, IrtVecType Vec)


Description:

Extract the translation vector from a given transformation matrix.

Parameters:

Mat: Source transformation matrix.
Vec: Destination translation vector.


Returned Value:

void


See Also:

GMQuatMatrixToScale GMQuatRotMatrixToAngles

Keywords:

Transformation Quaternion


GMQuatMatrixToVector

(quatrnn.c:696)

Prototype:

  int GMQuatMatrixToVector(IrtHmgnMatType Mat, GMQuatTransVecType TransVec)


Description:

Extract the transformation parameters vector from a given transformation matrix. A transformation vector contains the rotation angles in all 3 axis, the translation in all 3 axis and a uniform scaling factor. Since there are many ways to combine these parameters, we chose the following order: To create a transformation matrix out of a transformation vector - first create a rotation matrix (rotate by X then by Y and then by Z), then create a uniform scaling matrix and finally create a translation matrix. Apply roation, then scale and finally translation to obtain the original transformation matrix. To create a transformation vector out of a transformation matrix, we simply do it all in reverse : extract and cancel transformation effects, extract and cancel scaling effects and then extract roation effects.

Parameters:

Mat: Source transformation matrix.
TransVec: The result transformation parameters vector.


Returned Value:

int: TRUE only if the input matrix is a transformation matrix.


See Also:

GMQuatMatrixToScale GMQuatMatrixToTranslation GMQuatMatrixToAngles

Keywords:

Transformation Quaternion


GMQuatMul

(quatrnn.c:202)

Prototype:

  void GMQuatMul(GMQuatType q1, GMQuatType q2, GMQuatType QRes)


Description:

Mutliplies two quatenrions. Order of arguments counts.

Parameters:

q1: Left quaternion.
q2: Right quaternion.
QRes: Result quaternion.


Returned Value:

void


See Also:

GMQuatMatToQuat

Keywords:

Quaternion


GMQuatNormalize

(quatrnn.c:279)

Prototype:

  void GMQuatNormalize(GMQuatType q)


Description:

Normalizes a quaternion into a unit size quaternion (as a 4 vector)

Parameters:

q: quaternion.


Returned Value:

void


See Also:

GMQuatIsUnitQuat GMQuatInverse GMQuatIsUnitQuat

Keywords:

Quaternion


GMQuatPow

(quatrnn.c:455)

Prototype:

  void GMQuatPow(GMQuatType MantisQ, IrtRType Expon, GMQuatType DstQ)


Description:

Calculates the quaternion to the power of a real exponenet.

Parameters:

MantisQ: Mantisa quaternion.
Expon: Real exponent.
DstQ: Detination (result) quaternion.


Returned Value:

void


See Also:

GMQuatLog GMQuatExp

Keywords:

Quaternion


GMQuatRotateVec

(quatrnn.c:345)

Prototype:

  void GMQuatRotateVec(IrtVecType OrigVec, GMQuatType RotQ, IrtVecType DestVec)


Description:

Rotates a vector using a rotation quaternion.

Parameters:

OrigVec: Original (source) vector.
RotQ: Rotation quaternion.
DestVec: Detination (rotated) vector.


Returned Value:

void


See Also:

GMQuatMatToQuat

Keywords:

Quaternion


GMQuatRotationToQuat

(quatrnn.c:143)

Prototype:

  void GMQuatRotationToQuat(IrtRType Xangle,
                            IrtRType Yangle,
                            IrtRType Zangle,
                            GMQuatType q)


Description:

Creates a quaternion from an arbitrary rotation in X-Y-Z order.

Parameters:

Xangle: Roation angle around X axis
Yangle: Roation angle around Y axis
Zangle: Roation angle around Z axis
q: Destination quaternion.


Returned Value:

void


See Also:

GMQuatToMat GMQuatToRotation

Keywords:

Quaternion


GMQuatToMat

(quatrnn.c:34)

Prototype:

  void GMQuatToMat(GMQuatType q, IrtHmgnMatType Mat)


Description:

Transforms a quaternion to a matrix.

Parameters:

q: Source quaternion.
Mat: Destination matrix.


Returned Value:

void


See Also:

GMQuatMatToQuat GMQuatNormalize

Keywords:

Quaternion


GMQuatToRotation

(quatrnn.c:175)

Prototype:

  void GMQuatToRotation(GMQuatType q, IrtVecType *Angles, int *NumSolutions)


Description:

Finds rotation angles in X-Y-Z order from a given quaternion representation.

Parameters:

q: Rotation quaternion.
Angles: All possible rotation angles (up to 8).
NumSolutions: ointer to buffer that holds number of solutions found.


Returned Value:

void


See Also:

GMQuatToMat GMQuatRotationToQuat

Keywords:

Quaternion


GMQuatVecToRotMatrix

(quatrnn.c:827)

Prototype:

  void GMQuatVecToRotMatrix(GMQuatTransVecType TransVec,
                            IrtHmgnMatType RotMatrix)


Description:

Extracts a rotation matrix from a transformation parameters vector. The rotation, being axis-dependant, must be performed in a predefined order: rotate by X, then by Y and finally by Z.

Parameters:

TransVec: The source transformation parameters vector.
RotMatrix: The result rotation matrix.


Returned Value:

void


See Also:

GMQuatVecToTransMatrix GMQuatVecToScaleMatrix

Keywords:

Transformation Quaternion


GMQuatVecToScaleMatrix

(quatrnn.c:798)

Prototype:

  void GMQuatVecToScaleMatrix(GMQuatTransVecType TransVec,
                              IrtHmgnMatType ScaleMatrix)


Description:

Extracts a scale matrix from a transformation parameters vector.

Parameters:

TransVec: The source transformation parameters vector.
ScaleMatrix: The result scale matrix.


Returned Value:

void


See Also:

GMQuatVecToRotMatrix GMQuatVecToTransMatrix

Keywords:

Transformation Quaternion


GMQuatVecToTransMatrix

(quatrnn.c:868)

Prototype:

  void GMQuatVecToTransMatrix(GMQuatTransVecType TransVec,
                              IrtHmgnMatType TransMatrix)


Description:

Extracts a translation matrix from a transformation parameters vector.

Parameters:

TransVec: The source transformation parameters vector.
TransMatrix: The result translation matrix.


Returned Value:

void


See Also:

GMQuatVecToRotMatrix GMQuatVecToScaleMatrix

Keywords:

Transformation Quaternion


GMQuatVectorToMatrix

(quatrnn.c:765)

Prototype:

  void GMQuatVectorToMatrix(GMQuatTransVecType TransVec, IrtHmgnMatType Mat)


Description:

Converts a transformation parameters vector to a transformation matrix. A transformation vector contains the rotation angles in all 3 axis, the translation in all 3 axis and a uniform scaling factor. Since there are many ways to combine these parameters, we chose the following order: To create a transformation matrix out of a transformation vector - first create a rotation matrix (rotate by X, then by Y, and then by Z), then create a uniform scaling matrix and finally create a translation matrix. Apply rotation, then scale and finally translation to obtain the original transformation matrix. To create a transformation vector out of a transformation matrix, we simply do it all in reverse: extract and cancel transformation effects, extract and cancel scaling effects and then extract rotation effects.

Parameters:

TransVec: The source transformation parameters vector.
Mat: The result transformation matrix.


Returned Value:

void


See Also:

GMQuatVecToScaleMatrix GMQuatVecToRotMatrix GMQuatVecToTransMatrix

Keywords:

Transformation Quaternion


GMRayCnvxPolygonInter

(geomat3d.c:1628)

Prototype:

  int GMRayCnvxPolygonInter(const IrtPtType RayOrigin,
                            const IrtVecType RayDir,
                            const IPPolygonStruct *Pl,
                            IrtPtType InterPoint)


Description:

Tests if the given ray intersects the given convex polygon.

Parameters:

RayOrigin: Starting point of ray.
RayDir: Direction of ray.
Pl: Convex polygon to test against ray for intersection.
InterPoint: Resulting intersection point.


Returned Value:

int: TRUE if succesful, FALSE otherwise. *


See Also:

GMPointFromLinePlane GMPointInsideCnvxPolygon

Keywords:




GMRefineDeformedTriangle

(poly_pts.c:2462)

Prototype:

  int GMRefineDeformedTriangle(IPPolygonStruct *Pl,
                               GMPointDeformVrtxFctrFuncType DeformVrtxFctrFunc,
                               GMPointDeformVrtxDirFuncType DeformVrtxDirFunc,
                               void *UserData,
                               IrtRType DeviationTol,
                               IrtRType MaxEdgeLen)


Description:

Given a triangle in some deformation function and a function to evaluate deformation amount per vertex, refine the triangle as necessary to make the deformation be accurate within tolerance Tol. Only the vertices and mid-edge points on triangle are examined. Newly created (refined) triangles are appended in place between Pl and Pl -> Pnext. Note Pl will also be modified in place if refinement occurs.

Parameters:

Pl: Triangle to refine if necessary.
DeformVrtxFctrFunc: Function to evaluate the deformation amount factor of a given vertex.
DeformVrtxDirFunc: Function to evaluate the deformation vector (direction and amount) of a given vertex.
UserData: Optional auxiliary data reference to be transfered to DeformVrtxFctrFunc and DeformVrtxDirFunc.
DeviationTol: Of deformation approximation.
MaxEdgeLen: to allow in a triangle.


Returned Value:

int: TRUE if triangle underwent refinement, FALSE otherwise.


See Also:

GMRefineDeformedTriangle2

Keywords:




GMRefineDeformedTriangle2

(poly_pts.c:2247)

Prototype:

  int GMRefineDeformedTriangle2(IPPolygonStruct *Pl,
                                GMPointDeformVrtxFctrFuncType DeformVrtxFctrFunc,
                                void *UserData,
                                IrtBType Ref12,
                                IrtBType Ref23,
                                IrtBType Ref31)


Description:

Given a triangle Pl, divide and refine it along the edges as set by Refij. The result can be between one (no refinement) and four (all edges are defined) triangles that are substituted in place in Pl and before Pl -> pnext.

Parameters:

Pl: Triangle to refine if necessary.
DeformVrtxFctrFunc: Function to evaluate the deformation amount factor of a given vertex.
UserData: Optional auxiliary data reference to be transfered to DeformVrtxFctrFunc and DeformVrtxDirFunc.
Ref12, Ref23, Ref31: ooleans to set which edge must be refined.


Returned Value:

int: TRUE if triangle underwent refinement, FALSE otherwise.


See Also:

GMRefineDeformedTriangle

Keywords:




GMRegularizePolyModel

(poly_pts.c:1116)

Prototype:

  IPObjectStruct *GMRegularizePolyModel(const IPObjectStruct *PObj,
                                        int SplitCollinear,
                                        IrtRType MinRefineDist)


Description:

Regularize a polygonal model by eliminating all T junction in the polygonal mesh.

Parameters:

PObj: A polygonal object to regularize.
SplitCollinear: TRUE to also split polygons at collinear edges.
MinRefineDist: new vertices closer than this distance to their neighbors will NOT be added.


Returned Value:

IPObjectStruct *: Regularized object.


Keywords:




GMSLerp

(geom_bsc.c:324)

Prototype:

  void GMSLerp(const IrtVecType V1,
               const IrtVecType V2,
               IrtRType t,
               IrtVecType VOut)


Description:

Compute an angle-linear interpolation between two unit vectors (as if rotating vectors on a unit sphere). The Slerp function is based on: Animating rotation with quaternion curves, K. Shoemake, 1985.

Parameters:

V1, V2: The two vectors to interpolate.
t: The amount to interpolate (in the range [0,1]).
VOut: Output parameter. The resulting interpolated vector.


Returned Value:

void


Keywords:




GMScanConvertTriangle

(scancnvt.c:33)

Prototype:

  void GMScanConvertTriangle(int Pt1[2],
                             int Pt2[2],
                             int Pt3[2],
                             GMScanConvertApplyFuncType ApplyFunc)


Description:

Visits all pixels of the given triangle and invokes ApplyFunc on each such pixel.

Parameters:

Pt1, Pt2, Pt3: The three coordinates of the triangle.
ApplyFunc: The function that will be invoked on every pixel that is visited in this triangle.


Returned Value:

void


Keywords:




GMSilExtractBndry

(poly_sil.c:616)

Prototype:

  IPObjectStruct *GMSilExtractBndry(IPObjectStruct *PObjReg)


Description:

Generates the boundary of the polyhdral object PObjReg, assumed already regularized.

Parameters:

PObjReg: Object to extract the Boundary.


Returned Value:

IPObjectStruct *: The Boundary Object.


See Also:

GMSilExtractSil GMSilExtractSilDirect BoolGenAdjacencies GMSilExtractDiscont

Keywords:

boundary silhouette.


GMSilExtractDiscont

(poly_sil.c:541)

Prototype:

  IPObjectStruct *GMSilExtractDiscont(IPObjectStruct *PObjReg,
                                      IrtRType MinAngle)


Description:

Generates edges along adjacent polygons with a dihedral angle of more than MinAngle degrees.

Parameters:

PObjReg: Polyhedral Object to generate the silhouette for.
MinAngle: Minimal dihedral angle between adjacent polygons to consider as discontinuity. In radians.


Returned Value:

IPObjectStruct *: Discontinuities Object.


See Also:

GMSilExtractBndry GMSilExtractSil GMSilExtractSilDirect2 GMSilExtractSilDirect

Keywords:

discontinuities.


GMSilExtractSil

(poly_sil.c:669)

Prototype:

  IPObjectStruct *GMSilExtractSil(VoidPtr PrepSils, IrtHmgnMatType ViewMat)


Description:

Generates the silhouette of an object which has been already preprocessed and is associated with a grid structure.

Parameters:

PrepSils: Associated silhouette processing data structure of a polygonal object to generate its silhouettes.
ViewMat: View Matrix.


Returned Value:

IPObjectStruct *: Silhouette Object.


See Also:

GMSilPreprocessPolys GMSilOrigObjAlive GMSilExtractSilDirect GMSilExtractSilDirect2

Keywords:

silhouette.


GMSilExtractSilDirect

(poly_sil.c:335)

Prototype:

  IPObjectStruct *GMSilExtractSilDirect(IPObjectStruct *PObjReg,
                                        IrtHmgnMatType ViewMat)


Description:

Generates the silhouette from a polyhedral object, assumed already regularized with the straight forward method.

Parameters:

PObjReg: Polyhedral Object to generate the silhouette for.
ViewMat: View Matrix.


Returned Value:

IPObjectStruct *: Silhouette Object.


See Also:

GMSilExtractBndry GMSilExtractSil GMSilExtractSilDirect2 GMSilExtractDiscont

Keywords:

silhouette.


GMSilExtractSilDirect2

(poly_sil.c:491)

Prototype:

  IPObjectStruct *GMSilExtractSilDirect2(IPObjectStruct *PObjReg,
                                         IrtHmgnMatType ViewMat)


Description:

Generates the silhouette from a polyhedral object consisting of only triangles, and further assumed already regularized. The silhouettes generated by this function are interior to the triangles and are computed for each triangle individually, based on its vertices' normals.

Parameters:

PObjReg: Polyhedral Object to generate the silhouette for. Assumed to be regular and hold triangles only.
ViewMat: View Matrix.


Returned Value:

IPObjectStruct *: Silhouette Object.


See Also:

GMSilExtractBndry GMSilExtractSil GMSilExtractSilDirect

Keywords:

silhouette.


GMSilOrigObjAlive

(poly_sil.c:770)

Prototype:

  int GMSilOrigObjAlive(int ObjAlive)


Description:

If TRUE, this module is allowed to assume that the original polygonal object is alive while silhouette queries are conducted. Default to FALSE. Setting it to TRUE would allow certain optimization as well as the propagation of attributes of vertices from the original object to the detected silhouette edges.

Parameters:

ObjAlive: If TRUE, assumes original object remains valid throughout.


Returned Value:

int: Original vaolue of original object alive.


See Also:

GMSilExtractSil

Keywords:




GMSilPreprocessPolys

(poly_sil.c:222)

Prototype:

  VoidPtr GMSilPreprocessPolys(IPObjectStruct *PObjReg, int n)


Description:

Generates the Grid Structure of a polyhedral object. This is the preprocessing stage to the silhouette extraction method. Polyhedra is assumed regular, and has adjacency information.

Parameters:

PObjReg: Regular polyhedral Object.
n: Subdivision resolution of the Grid (n by n).


Returned Value:

VoidPtr: Grid Structure of preprocessing data structure.


See Also:

GMSilExtractBndry GMSilExtractSil BoolGenAdjacencies

Keywords:

silhouette boundary.


GMSilPreprocessRefine

(poly_sil.c:294)

Prototype:

  int GMSilPreprocessRefine(VoidPtr PrepSils, int n)


Description:

Compute a new Grid if the subdivision resolution has been changed.

Parameters:

PrepSils: Preprocessing data structure of silhouettes to refine to a new resolution n.
n: New subdivision resolution of the grid.


Returned Value:

int: TRUE if the grid was updated, FALSE otherwise.


Keywords:

silhouette boundary.


GMSilProprocessFree

(poly_sil.c:729)

Prototype:

  void GMSilProprocessFree(VoidPtr PrepSils)


Description:

Frees the proprocessing data structure of silhouettes.

Parameters:

PrepSils: To free.


Returned Value:

void


Keywords:

allocation


GMSolveCubicEqn

(geom_bsc.c:3404)

Prototype:

  int GMSolveCubicEqn(IrtRType A, IrtRType B, IrtRType C, IrtRType *Sols)


Description:

Computes the solutions, if any, of the given cubic equation. Only real solutions are considered.

Parameters:

A, B, C: The equation's coefficients as x^3 + A x^2 + B x + C = 0.
Sols: Where to place the solutions. At most three.


Returned Value:

int: Number of real solutions.


See Also:

GMSolveQuadraticEqn GMSolveQuadraticEqn2 GMSolveCubicEqn2 GMSolveQuarticEqn

Keywords:




GMSolveCubicEqn2

(geom_bsc.c:3500)

Prototype:

  int GMSolveCubicEqn2(IrtRType A,
                       IrtRType B,
                       IrtRType C,
                       IrtRType *RSols,
                       IrtRType *ISols)


Description:

Calculates the three roots (complex & real) of the cubic equation x^3 + Ax^2 + Bx + C = 0 Note: Cubic equations have at least one real root; this function always calculates the real root first, and the other two (possibly complex) later. This order of filling RSols & ISols is CRUCIAL for GMSolveQuarticEqn()

Parameters:

A, B, C: The coefficients of the cubic polynomial.
RSols, ISols: Each pair (RSols[i], ISols[i]) is the complex root(i)


Returned Value:

int: The number of REAL solutions of the cubic polynomial.


See Also:

GMSolveCubicEqn GMSolveQuadraticEqn GMSolveQuadraticEqn2 GMSolveQuarticEqn

Keywords:




GMSolveQuadraticEqn

(geom_bsc.c:3253)

Prototype:

  int GMSolveQuadraticEqn(IrtRType A, IrtRType B, IrtRType *Sols)


Description:

Computes the solutions, if any, of the given quadratic equation. Only real solutions are considered.

Parameters:

A, B: The equation's coefficients as x^2 + A x + B = 0.
Sols: Where to place the solutions. At most two.


Returned Value:

int: Number of real solutions.


See Also:

GMSolveCubicEqn GMSolveCubicEqn2 GMSolveQuadraticEqn2 GMSolveQuarticEqn

Keywords:




GMSolveQuadraticEqn2

(geom_bsc.c:3296)

Prototype:

  int GMSolveQuadraticEqn2(IrtRType B,
                           IrtRType C,
                           IrtRType *RSols,
                           IrtRType *ISols)


Description:

Calculates the two square roots of the quadratic equation: x^2 + Bx + C = 0

Parameters:

B, C: The coefficients of the quadratic polynomial.
RSols, ISols: olutions such that each pair RSols[i], ISols[i] is the complex root(i).


Returned Value:

int: The number of REAL solutions of the polynomial.


See Also:

GMSolveCubicEqn GMSolveCubicEqn2 GMSolveQuadraticEqn GMSolveQuarticEqn

Keywords:




GMSolveQuarticEqn

(geom_bsc.c:3666)

Prototype:

  int GMSolveQuarticEqn(IrtRType a,
                        IrtRType b,
                        IrtRType c,
                        IrtRType d,
                        IrtRType *Sols)


Description:

Computes the (upto) four real roots of the quartic equation
    x^4 + Ax^3 + Bx^2 + Cx + D = 0

Note 1 ------ In order to avoid building a library for complex numbers arithmetics, two arrays are used ISols[] and RSols[], where each RSols[i] and ISols[i], represent a complex number, and so calculation where made on the fly; Anyway, some of these calculations where performed in a specific way to reduce errors of double-precision nature. (especially calculating square roots of complex numbers). Note 2. ---------- In the case of Cubic and Quadratic equations, the number of real solutions is determined via the value of D (the descrimenant); As such, the number of real solutions is easier to depict. However, Euler's solution for quartic equations manipulates all the three solutions of the cubic (real and complex), hoping to find some real roots by eliminating the imaginary part of the complex solutions. This, however, is a weakness of dependency upon the accuracy of the numbers' representation as a double-precision floating point.

Parameters:

a, b, c, d: The coefficients of the quartic polynomial.
Sols: The real roots of the polynomial.


Returned Value:

int: The number of REAL solutions of the polynomial.


See Also:

GMSolveCubicEqn GMSolveCubicEqn2 GMSolveQuadraticEqn GMSolveQuadraticEqn2

Keywords:




GMSphConeGetPtsDensity

(sph_cone.c:455)

Prototype:

  const IrtVecType *GMSphConeGetPtsDensity(int *n)


Description:

Returns unit vectors on the unit sphere spread uniformly, in a number that closely approximate given n.

Parameters:

n: Number of pts to be distributed on the sphere (approximately). n will be updated to the actual size of the returned vector of unit vectors.


Returned Value:

const IrtVecType *: A vector of ~n unit vectors equally spead over the unit sphere.


See Also:

GMSphConeSetConeDensity

Keywords:




GMSphConeQuery2GetVectors

(sph_cone.c:688)

Prototype:

  void GMSphConeQuery2GetVectors(VoidPtr SphConePtr,
                                 GMSphConeQueryDirFuncType SQQuery,
                                 GMSphConeQueryCallBackFuncType SQFunc)


Description:

Invokes SQFunc with all vectors in the preprocessed data set that the cone containing them satisfy the query function SQQuery. Each such vector is guaranteed to be invoked once only.

Parameters:

SphConePtr: Processed data struct for efficient Direction querying.
SQQuery: Query function to invoke.
SQFunc: Function to invoke on detected elements.


Returned Value:

void


See Also:

GMSphConeQueryInit GMSphConeQueryFree GMSphConeSetConeDensity GMSphConeQuery2GetVectors

Keywords:




GMSphConeQueryFree

(sph_cone.c:589)

Prototype:

  void GMSphConeQueryFree(VoidPtr SphConePtr)


Description:

Release all data allocated by GMSphConeQueryInit function.

Parameters:

SphConePtr: Cone data structure to free.


Returned Value:

void


See Also:

GMSphConeQueryInit GMSphConeQueryGetVectors GMSphConeSetConeDensity

Keywords:




GMSphConeQueryGetVectors

(sph_cone.c:628)

Prototype:

  void GMSphConeQueryGetVectors(VoidPtr SphConePtr,
                                IrtVecType Dir,
                                IrtRType Angle,
                                GMSphConeQueryCallBackFuncType SQFunc)


Description:

Invokes SQFunc with all vectors in the preprocessed data set that are at most Angle degrees for the prescibed Dir. Each such vector is guaranteed to be invoked once only.

Parameters:

SphConePtr: Processed data struct for efficient Direction querying.
Dir: Direction to query.
Angle: Angular span to query.
SQFunc: Function to invoke on detected elements.


Returned Value:

void


See Also:

GMSphConeQueryInit GMSphConeQueryFree GMSphConeSetConeDensity GMSphConeQuery2GetVectors

Keywords:




GMSphConeQueryInit

(sph_cone.c:490)

Prototype:

  VoidPtr GMSphConeQueryInit(IPObjectStruct *PObj, int n)


Description:

Proeprocess the given set of points into the different bounding cones of the unit sphere.

Parameters:

PObj: A point list object to preprocess.
n: Number of cones to distribute on the sphere (approximately).


Returned Value:

VoidPtr: Processed data structure for fast cone queries.


See Also:

GMSphConeQueryFree GMSphConeQueryGetVectors GMSphConeSetConeDensity

Keywords:




GMSphereWith3Pts

(ms_spher.c:300)

Prototype:

  int GMSphereWith3Pts(IrtE3PtStruct *Pts, IrtRType *Center, IrtRType *RadiusSqr)


Description:

Given three points, compute the sphere through the set of points. Initially, the three points are rotated to a plane paraellel to XY-plane and then using GMCircleFrom3Points, the circle through them is computed. The center is then rotated back to form the center of the sphere in 3D.

Parameters:

Pts: The set of point to compute their sphere.
Center: Of computed sphere.
RadiusSqr: Of computed Sphere.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMCircleFrom3Points

Keywords:




GMSphereWith4Pts

(ms_spher.c:359)

Prototype:

  int GMSphereWith4Pts(IrtE3PtStruct *Pts, IrtRType *Center, IrtRType *RadiusSqr)


Description:

Given four points, compute the sphere through the set of points. It is identified by solving the following equidistant conditions.
     < P - P1, P - P1 > = < P - P2, P - P2 >,
     < P - P1, P - P1 > = < P - P3, P - P3 >,
     < P - P1, P - P1 > = < P - P4, P - P4 >,

or,
     2(P2 - P1) P = P2^2 - P1^2,
     2(P3 - P1) P = P3^2 - P1^2,
     2(P4 - P1) P = P4^2 - P1^2.

We can solve for P (the sphere's center) using the Cramer's rule.

Parameters:

Pts: The set of point to compute their sphere.
Center: Of computed sphere.
RadiusSqr: Of computed Sphere.


Returned Value:

int: TRUE if successful, FALSE otherwise.


See Also:

GMMinSpanSphere

Keywords:




GMSplitNonConvexPoly

(convex.c:573)

Prototype:

  IPPolygonStruct *GMSplitNonConvexPoly(IPPolygonStruct *Pl,
                                        int HandleNormals)


Description:

Routine to split non convex polygon into a list of convex ones. 1. Search for non convex corner. If not found stop - polygon is convex. Otherwise let the non convex corner found be V(i). 2. Fire a ray from V(i) in the opposite direction to V(i-1). Find the closest intersection of the ray with polygon boundary P. 3. Split the polygon into two at V(i)-P edge and push the two new polygons on the GlblList. 4. Goto 1.

Parameters:

Pl: Non convex polygon to split into convex ones.
HandleNormals: TRUE to also handle normals.


Returned Value:

IPPolygonStruct *: A list of convex polygons resulting from splitting up Pl.


See Also:

GMConvertPolysToTriangles GMConvexPolyObject GMConvexPolyObjectN GMIsConvexPolygon

Keywords:

convexity convex polygon


GMSplitPolyInPlaceAt2Vertices

(poly_pts.c:1522)

Prototype:

  IPPolygonStruct *GMSplitPolyInPlaceAt2Vertices(IPPolygonStruct *Pl,
                                                 IPVertexStruct *V1,
                                                 IPVertexStruct *V2)


Description:

Splits the given convex polygon, in place, into two, returning second half of the polygon while updating Pl to hold the first half.

Parameters:

Pl: Convex polygon to split into two.
V1: First Vertex to split Pl at.
V2: Second Vertex to split Pl at.


Returned Value:

IPPolygonStruct *: The second half of the splitted polygon (first half is returned, in place, in Pl). This function returns a NULL if split failed due to the fact that the polygon degenerated into a line. Pl is not affected if NULL is returned. The second polygon is added as next to the first polygon.


See Also:

GMSplitPolyInPlaceAtVertex

Keywords:




GMSplitPolyInPlaceAtVertex

(poly_pts.c:1446)

Prototype:

  IPPolygonStruct *GMSplitPolyInPlaceAtVertex(IPPolygonStruct *Pl,
                                              IPVertexStruct *VHead)


Description:

Splits the given convex polygon, in place, into two, returning second half of the polygon while updating Pl to hold the first half. Polygon is split so that VHead is on border between the two polygons.

Parameters:

Pl: Convex polygon to split into two.
VHead: Vertex to split Pl at.


Returned Value:

IPPolygonStruct *: The second half of the splitted polygon (first half is returned, in place, in Pl). This function returns a NULL if split failed due to the fact that the polygon degenerated into a line. Pl is not affected if NULL is returned.


See Also:

GMSplitPolyInPlaceAt2Vertices

Keywords:




GMSplitPolygonAtPlane

(geom_bsc.c:1723)

Prototype:

  int GMSplitPolygonAtPlane(IPPolygonStruct *Pl, const IrtPlnType Pln)


Description:

Split the given convex polygon where it intersects the given plane. Pl is updated to in inside potion (where the normal is point into) and Pl -> Pnext will hold the second half.

Parameters:

Pl: Polygon to split if interestes plane Pln.
Pln: Plane to split polygon Pl at. Assumed normalized normal vector in Pln.


Returned Value:

int: TRUE if intersects, FALSE otherwise.


See Also:

GMPolygonRayInter GMPolygonPlaneInter

Keywords:




GMSplitPolysAtCollinearVertices

(poly_pts.c:1372)

Prototype:

  IPPolygonStruct *GMSplitPolysAtCollinearVertices(IPPolygonStruct *Pls)


Description:

Splits the given polygons in vertices that connect two adjacent collinear edges. Polygons are assumed convex other than this collinearity conditions.

Parameters:

Pls: List of polygons to split at collinear edges.


Returned Value:

IPPolygonStruct *: New list of polygons with no collinear adjacent edges.


Keywords:




GMSrfBilinearFit

(analyfit.c:48)

Prototype:

  IrtPtType *GMSrfBilinearFit(IrtPtType *ParamDomainPts,
                              IrtPtType *EuclideanPts,
                              int FirstAtOrigin,
                              int NumPts,
                              IrtPtType *FitPts)


Description:

Fits a bilinear surface to the set of given points as F(u,v) = A + B * u + C * v + D * u * v, A,B,C,D points in R^3.

Parameters:

ParamDomainPts: Array of UV points prescribing the parametric values.
EuclideanPts: Array of XYZ points defining the Euclidean values of the ParamDomainPts with obviously the same order.
FirstAtOrigin: If TRUE, the first points is set to be at U = V = 0.
NumPts: Number of points in ParamDomainPts and EuclideanPts.
FitPts: Array of four points values, A, B, C, D. Will hold the returned value.


Returned Value:

IrtPtType *: Array of four points values, A, B, C, D. Same as Fit Pts.


See Also:

GMSrfQuadricFit

Keywords:




GMSrfCubicQuadOnly

(analyfit.c:345)

Prototype:

  IrtPtType *GMSrfCubicQuadOnly(IrtPtType *ParamDomainPts,
                                IrtPtType *EuclideanPts,
                                int FirstAtOrigin,
                                int NumEucDim,
                                int NumPts,
                                IrtPtType *CubicData)


Description:

Fits a cubic surface (cubic and quad terms only) to the set of given points as F(u,v) = A + B * u + C * v + D * u^2 + E * u * v + F * v^2 + G * u^3 + H * u^2 * v + I * u * v^2 + J * v^3, A,B,C,D,E,F,G,H,I,J points in R^3.

Parameters:

ParamDomainPts: Array of UV points prescribing the parametric values.
EuclideanPts: Array of XYZ points defining the Euclidean values of the ParamDomainPts with obviously the same order.
FirstAtOrigin: If TRUE, the first points is set to be at U = V = 0.
NumEucDim: Number of Euclidean dimension. 1 for scalar surface and up to 3 for parametric surface in R^3.
NumPts: Number of points in ParamDomainPts and EuclideanPts.
CubicData: The fitted cubic data. Should be given as a vector of 10 reals.


Returned Value:

IrtPtType *: Array of 10 point values, A,B,C,D,E,F,G,H,I,J in order, where A = B = C = 0 always. Same as CubicData.


See Also:

GMSrfBilinearFit GMSrfQuadricFit GMSrfQuadricQuadOnly

Keywords:




GMSrfQuadricFit

(analyfit.c:142)

Prototype:

  IrtPtType *GMSrfQuadricFit(IrtPtType *ParamDomainPts,
                             IrtPtType *EuclideanPts,
                             int FirstAtOrigin,
                             int NumPts,
                             IrtPtType *FitPts)


Description:

Fits a quadric surface to the set of given points as F(u,v) = A + B * u + C * v + D * u * u + E * u * v + F * v * v, A,B,C,D,E,F points in R^3.

Parameters:

ParamDomainPts: Array of UV points prescribing the parametric values.
EuclideanPts: Array of XYZ points defining the Euclidean values of the ParamDomainPts with obviously the same order.
FirstAtOrigin: If TRUE, the first points is set to be at U = V = 0.
NumPts: Number of points in ParamDomainPts and EuclideanPts.
FitPts: Array of six point values, A,B,C,D,E,F in order. Will hold the returned value.


Returned Value:

IrtPtType *: Array of six point values, A,B,C,D,E,F in order. Same as Fit Pts.


See Also:

GMSrfBilinearFit GMSrfQuadricQuadOnly GMSrfCubicQuadOnly

Keywords:




GMSrfQuadricQuadOnly

(analyfit.c:242)

Prototype:

  IrtPtType *GMSrfQuadricQuadOnly(IrtPtType *ParamDomainPts,
                                  IrtPtType *EuclideanPts,
                                  int FirstAtOrigin,
                                  int NumEucDim,
                                  int NumPts,
                                  IrtPtType *QuadData)


Description:

Fits a quadric surface (quad terms only) to the set of given points as F(u,v) = A + B * u + C * v + D * u * u + E * u * v + F * v * v, A,B,C,D,E,F points in R^3.

Parameters:

ParamDomainPts: Array of UV points prescribing the parametric values.
EuclideanPts: Array of XYZ points defining the Euclidean values of the ParamDomainPts with obviously the same order.
FirstAtOrigin: If TRUE, the first points is set to be at U = V = 0.
NumEucDim: Number of Euclidean dimension. 1 for scalar surface and up to 3 for parametric surface in R^3.
NumPts: Number of points in ParamDomainPts and EuclideanPts.
QuadData: The returned fitted quadratic data. Should be given as a vector of 6 reals.


Returned Value:

IrtPtType *: Array of 6 point values, A,B,C,D,E,F in order, where A = B = C = 0 always. Same as QuadData.


See Also:

GMSrfBilinearFit GMSrfQuadricFit GMSrfCubicQuadOnly

Keywords:




GMSubButterfly

(sbdv_srf.c:156)

Prototype:

  IPObjectStruct *GMSubButterfly(const IPObjectStruct *OriginalObj,
                                 IrtRType ButterflyWCoef)


Description:

Refines a polygonal object according to Butterfly subdivision rules. One iteration is performed.

Parameters:

OriginalObj: A pointer to the original polygonal object.
ButterflyWCoef: he scalar butterfly blending coefficient.


Returned Value:

IPObjectStruct *: pointer to refined polygonal object after subdivision.


Keywords:




GMSubCatmullClark

(sbdv_srf.c:102)

Prototype:

  IPObjectStruct *GMSubCatmullClark(const IPObjectStruct *OriginalObj)


Description:

Refines a polygonal object according to Catmull-Clark subdivision rules. One iteration is performed.

Parameters:

OriginalObj: A pointer to the original polygonal object.


Returned Value:

IPObjectStruct *: Pointer to refined polygonal object after subdivision.


Keywords:




GMSubLoop

(sbdv_srf.c:128)

Prototype:

  IPObjectStruct *GMSubLoop(const IPObjectStruct *OriginalObj)


Description:

Refines a polygonal object according to Loop subdivision rules. One iteration is performed.

Parameters:

OriginalObj: A pointer to the original polygonal object.


Returned Value:

IPObjectStruct *: Pointer to refined polygonal object after subdivision.


Keywords:




GMTransObjSetAnimCrvUpdateFunc

(geomat3d.c:402)

Prototype:

  GMTransObjUpdateAnimCrvsFuncType GMTransObjSetAnimCrvUpdateFunc(
                                GMTransObjUpdateAnimCrvsFuncType AnimUpdateFunc)


Description:

Sets the function to update the animation curves to work properly after the applied transformation Mat to the parent object whose PAnim are his.

Parameters:

AnimUpdateFunc: New animation crvs update function for obj transform.


Returned Value:

GMTransObjUpdateAnimCrvsFuncType: Old function


See Also:

GMTransformObject GMTransObjSetUpdateFunc GMTransObjUpdateAnimCrvs

Keywords:




GMTransObjSetUpdateFunc

(geomat3d.c:371)

Prototype:

  GMTransObjUpdateFuncType GMTransObjSetUpdateFunc(GMTransObjUpdateFuncType
                                                                      UpdateFunc)


Description:

Set the update transform call back function to a new function. This call back function is invoked with the original object, the transformed object and the transformation matrix, just before GMTransformObject is returned.

Parameters:

UpdateFunc: New call back function for GMTransformObject


Returned Value:

GMTransObjUpdateFuncType: Old value of call back function.


See Also:

GMTransformObject GMTransObjSetAnimCrvUpdateFunc

Keywords:




GMTransObjUpdateAnimCrvs

(geomat3d.c:670)

Prototype:

  IPObjectStruct *GMTransObjUpdateAnimCrvs(IPObjectStruct *PAnim,
                                           IrtHmgnMatType Mat)


Description:

Update the animation curves to work properly after the applied transformation Mat to the parent object whose PAnim are his.

Parameters:

PAnim: Animation curves to update following transformation matrix Mat.
Mat: The transformation matrix.


Returned Value:

IPObjectStruct *: The updated animation curves' list.


See Also:

GMTransformObject

Keywords:

transformations


GMTransformObject

(geomat3d.c:464)

Prototype:

  IPObjectStruct *GMTransformObject(const IPObjectStruct *PObj,
                                    IrtHmgnMatType Mat)


Description:

Routine to transform an object according to the transformation matrix.

Parameters:

PObj: Object to be transformed.
Mat: Transformation matrix.


Returned Value:

IPObjectStruct *: Transformed object.


See Also:

GMTransObjUpdateAnimCrvs GMTransObjSetUpdateFunc GMTransformPolyList GMTransformObjectInPlace

Keywords:

transformations


GMTransformObjectInPlace

(geomat3d.c:435)

Prototype:

  IPObjectStruct *GMTransformObjectInPlace(IPObjectStruct *PObj,
                                           IrtHmgnMatType Mat)


Description:

Routine to transform an object according to the transformation matrix. Input object, PObj, is freed.

Parameters:

PObj: Object to be transformed.
Mat: Transformation matrix.


Returned Value:

IPObjectStruct *: Transformed object.


See Also:

GMTransObjUpdateAnimCrvs GMTransObjSetUpdateFunc GMTransformPolyList GMTransformObject

Keywords:

transformations


GMTransformObjectList

(geomat3d.c:739)

Prototype:

  IPObjectStruct *GMTransformObjectList(const IPObjectStruct *PObj,
                                        IrtHmgnMatType Mat)


Description:

Routine to transform an list of objects according to a transformation matrix.

Parameters:

PObj: Object list to transform.
Mat: Transformation matrix.


Returned Value:

IPObjectStruct *: Transformed object list.


Keywords:

transformations


GMTransformPolyList

(geomat3d.c:294)

Prototype:

  IPPolygonStruct *GMTransformPolyList(const IPPolygonStruct *Pls,
                                       IrtHmgnMatType Mat,
                                       int IsPolygon)


Description:

Routine to transform a list of polygons according to the prescribed transformation matrix.

Parameters:

Pls: List of polygons to transform.
Mat: Transformation matrix.
IsPolygon: RUE for polygons, for for polylines/points.


Returned Value:

IPPolygonStruct *: A list of transformed polygons.


See Also:

GMTransformObject

Keywords:




GMTrianglePointInclusion

(geom_bsc.c:1841)

Prototype:

  int GMTrianglePointInclusion(const IrtRType *V1,
                               const IrtRType *V2,
                               const IrtRType *V3,
                               const IrtPtType Pt)


Description:

Routine to check if a point is inside a triangle, in the XY plane.

Parameters:

V1, V2, V3: riangle to test if Pt is in it.
Pt: Point to test for inclusion in triangle.


Returned Value:

int: TRUE if Pt inside triangle, FALSE otherwise.


See Also:

GMPolygonPointInclusion GMPolygonPlaneInter GMPolygonRayInter

Keywords:

point inclusion


GMTriangulatePolygon

(poly_tri.c:385)

Prototype:

  IPPolygonStruct *GMTriangulatePolygon(const CagdPolylineStruct *Pl)


Description:

Triangulates a closed polygon. The triangulation based on the paper: Klincsek, G.T. (1980), Minimal triangulations of polygonal domains, Annals of Discrete Mathematics 9, 121-123 The used weight function is: 0.75 * TriangleArea + 0.05 * TrianglePerimeter + 0.10 * EdgesMaxMinRatio + 0.10 * AnglesMaxMinRatio

Parameters:

Pl: polygon to triangulate.


Returned Value:

IPPolygonStruct *: List of triangles.


See Also:

GMTriangulatePolygon2

Keywords:




GMTriangulatePolygon2

(poly_tri.c:469)

Prototype:

  IPPolygonStruct *GMTriangulatePolygon2(const IPPolygonStruct *Pl)


Description:

Triangulates a closed polygon. The triangulation based on minimum weight triangulation(https://en.wikipedia.org/wiki/Minimum-weight_triangulation) The used weight function is: 0.75 * TriangleArea + 0.05 * TrianglePerimeter + 0.10 * EdgesMaxMinRatio + 0.10 * AnglesMaxMinRatio

Parameters:

Pl: polygon to triangulate.


Returned Value:

IPPolygonStruct *: List of triangles.


See Also:

GMTriangulatePolygon GMConvertPolysToTriangles

Keywords:




GMTriangulatePolygonList

(poly_tri.c:501)

Prototype:

  IPPolygonStruct *GMTriangulatePolygonList(const IPPolygonStruct *PlgnList)


Description:

Triangulates a closed polygon. The triangulation based on minimum weight triangulation(https://en.wikipedia.org/wiki/Minimum-weight_triangulation) The used weight function is: 0.75 * TriangleArea + 0.05 * TrianglePerimeter + 0.10 * EdgesMaxMinRatio + 0.10 * AnglesMaxMinRatio

Parameters:

PlgnList: polygon list to triangulate.


Returned Value:

IPPolygonStruct *: List of triangles.


See Also:

GMConvertPolysToTriangles GMTriangulatePolygon2

Keywords:




GMTwoPolySameGeom

(poly_cln.c:42)

Prototype:

  int GMTwoPolySameGeom(const IPPolygonStruct *Pl1,
                        const IPPolygonStruct *Pl2,
                        IrtRType Eps)


Description:

Compare two polygons if share the same geometry. Two polygons are considered same if the share the same vertices in order (or in reverse).

Parameters:

Pl1, Pl2: Two polygons to compare.
Eps: Tolerance of vertices equality, etc.


Returned Value:

int: TRUE if two polygons posses same geometry, FALSE otherwise.


See Also:

GMCleanUpDupPolys

Keywords:




GMUpdateVerticesByInterp

(intrnrml.c:77)

Prototype:

  void GMUpdateVerticesByInterp(IPPolygonStruct *PlList,
                                const IPPolygonStruct *OriginalPl)


Description:

For each polygon in PlList update any vertex with a proper normal, uv uv coord, rgb color, etc. if available in the Original polygon vertex list OriginalPl. All the new vertices are enclosed within the original polygon which must be convex as well.

Parameters:

PlList: List of polygons to update normal for.
OriginalPl: Original polygons PlList was derived from, probably using Boolean operations.


Returned Value:

void


See Also:

GMBlendNormalsToVertices GMInterpVrtxNrmlBetweenTwo GMInterpVrtxNrmlBetweenTwo2 GMInterpVrtxNrmlFromPl GMInterpVrtxRGBBetweenTwo GMInterpVrtxRGBFromPl GMInterpVrtxUVBetweenTwo GMInterpVrtxUVFromPl

Keywords:

normals uv coords rgb color


GMVecCopy

(geom_bsc.c:88)

Prototype:

  void GMVecCopy(IrtVecType Vdst, const IrtVecType Vsrc)


Description:

Routine to copy one vector to another:

Parameters:

Vdst: Destination vector.
Vsrc: Source vector.


Returned Value:

void


Keywords:

copy


GMVecCrossProd

(geom_bsc.c:207)

Prototype:

  void GMVecCrossProd(IrtVecType Vres,
                      const IrtVecType V1,
                      const IrtVecType V2)


Description:

Routine to compute the cross product of two vectors. Note Vres may be the same as V1 or V2.

Parameters:

Vres: Result of cross product
V1, V2: Two vectors of the cross product.


Returned Value:

void


Keywords:

cross prod


GMVecDotProd

(geom_bsc.c:515)

Prototype:

  IrtRType GMVecDotProd(const IrtVecType V1, const IrtVecType V2)


Description:

Routine to compute the dot product of two vectors.

Parameters:

V1, V2: Two vector to compute dot product of.


Returned Value:

IrtRType: Resulting dot product.


Keywords:

GMVecDotProdLen dot product


GMVecDotProdLen

(geom_bsc.c:534)

Prototype:

  IrtRType GMVecDotProdLen(const IrtRType *V1, const IrtRType *V2, int Len)


Description:

Routine to compute the dot product of two vectors of length Len.

Parameters:

V1, V2: Two vector to compute dot product of.
Len: Length of vectors.


Returned Value:

IrtRType: Resulting dot product.


Keywords:

GMVecDotProd dot product


GMVecLength

(geom_bsc.c:131)

Prototype:

  IrtRType GMVecLength(const IrtVecType V)


Description:

Routine to compute the magnitude (length) of a given 3D vector:

Parameters:

V: To compute its magnitude.


Returned Value:

IrtRType: Magnitude of V.


Keywords:

magnitude


GMVecMaxAbsValueIndex

(geom_bsc.c:179)

Prototype:

  int GMVecMaxAbsValueIndex(const IrtVecType V)


Description:

Routine to compute the axis in vector with the largest absolute value.

Parameters:

V: To compute its maximal axis.


Returned Value:

int: Computed axis.


See Also:

GMVecMinAbsValueIndex

Keywords:

magnitude


GMVecMinAbsValueIndex

(geom_bsc.c:152)

Prototype:

  int GMVecMinAbsValueIndex(const IrtVecType V)


Description:

Routine to compute the axis in vector with the smallest absolute value.

Parameters:

V: To compute its minimal axis.


Returned Value:

int: Computed axis.


See Also:

GMVecMaxAbsValueIndex

Keywords:

magnitude


GMVecNormalize

(geom_bsc.c:106)

Prototype:

  void GMVecNormalize(IrtVecType V)


Description:

Routine to normalize the vector length to a unit size.

Parameters:

V: To normalize.


Returned Value:

void


Keywords:

normalize


GMVecReflectPlane

(geom_bsc.c:561)

Prototype:

  void GMVecReflectPlane(IrtVecType Dst, IrtVecType Src, IrtVecType PlaneNormal)


Description:

Reflects a 3D vector through a plane with normal PlaneNormal

Parameters:

Dst: Reflected vector.
Src: Input Vector to reflect.
PlaneNormal: Normal of plane (through origin) to reflect Src through.


Returned Value:

void


Keywords:




GMVecVecAngle

(geom_bsc.c:285)

Prototype:

  IrtRType GMVecVecAngle(const IrtVecType V1, const IrtVecType V2, int Normalize)


Description:

Computes the angle between two space vectors. Angle is returned in radians in the domain of [-Pi, +Pi].

Parameters:

V1, V2: Vectors to compute their relative angle, in radians.
Normalize: RUE if vectors need normalization first, FALSE if unit size.


Returned Value:

IrtRType: Angle.


See Also:

GMAreaSphericalTriangle

Keywords:




GMVectorFromVectorPlane

(geom_bsc.c:861)

Prototype:

  int GMVectorFromVectorPlane(const IrtVecType Vec,
                              const IrtVecType PlaneN,
                              IrtPtType ProjVec)


Description:

Compute the normalized projection of a vector onto a plane. Only the normal direction of the plane id used. This function is invariant to translation of the plane in Euclidean space.

Parameters:

Vec: Vector for which find projection onto Plane.
PlaneN: On which to project Vec.
ProjVec: The projection of Vec onto Plane, as a normalized vector.


Returned Value:

int: TRUE, if successful.


See Also:

GMPointFromPointPlane

Keywords:




GMVerifyPolygonsPlanarity

(poly_cln.c:423)

Prototype:

  IPPolygonStruct *GMVerifyPolygonsPlanarity(IPPolygonStruct *Pls, IrtRType Tol)


Description:

Scans all input polygons and split any non coplanar polygons into triangles.

Parameters:

Pls: Polygons to scan and modify, if necessary, in place.
Tol: Of planarity verification.


Returned Value:

IPPolygonStruct *: Refined list with no coplanar polygons.


Keywords:




GMVrtxListToCircOrLin

(poly_cln.c:474)

Prototype:

  void GMVrtxListToCircOrLin(IPPolygonStruct *Pls, int DoCirc)


Description:

Routine to make sure all polys given are circular/linear. Update in place.

Parameters:

Pls: List of polys to make sure are circular/linear, in place.
DoCirc: f TRUE, list are made circular. If FALSE, vertices are NULL terminated.


Returned Value:

void


See Also:

GMCleanUpPolylineList GMCleanUpPolygonList GMFilterInteriorVertices GMVrtxListToCircOrLinDup IPOpenPolysToClosed IPClosedPolysToOpen IPSetPolyListCirc

Keywords:

circular lists


GMVrtxListToCircOrLinDup

(poly_cln.c:513)

Prototype:

  void GMVrtxListToCircOrLinDup(IPPolygonStruct *Pls, int DoCirc)


Description:

Routine to make sure all polys given are circular/linear. Update in place. If circular and made linear, first vertex is duplicated as last and same when linear is made circular.

Parameters:

Pls: List of polys to make sure are circular/linear, in place.
DoCirc: f TRUE, list are made circular. If FALSE, vertices are NULL terminated.


Returned Value:

void


See Also:

GMCleanUpPolylineList GMCleanUpPolygonList GMFilterInteriorVertices GMVrtxListToCircOrLin IPOpenPolysToClosed IPClosedPolysToOpen

Keywords:

circular lists


GMZBufferClear

(zbuffer.c:129)

Prototype:

  void GMZBufferClear(VoidPtr ZbufferID)


Description:

Clears the Z buffer to initialization state.

Parameters:

ZbufferID: ID of the zbuffer to use.


Returned Value:

void


See Also:

GMZBufferClearSet

Keywords:




GMZBufferClearSet

(zbuffer.c:171)

Prototype:

  void GMZBufferClearSet(VoidPtr ZbufferID, IrtRType Depth)


Description:

Clears the Z buffer to initialization state of depth value Depth.

Parameters:

ZbufferID: ID of the zbuffer to use.
Depth: Initial depth to use.


Returned Value:

void


See Also:

GMZBufferClear

Keywords:




GMZBufferFree

(zbuffer.c:97)

Prototype:

  void GMZBufferFree(VoidPtr ZbufferID)


Description:

Free the given Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to free.


Returned Value:

void


Keywords:




GMZBufferInit

(zbuffer.c:60)

Prototype:

  VoidPtr GMZBufferInit(int Width, int Height)


Description:

Sets up the Zbuffer software implementation.

Parameters:

Width, Height: idth and Height of the Z buffer.


Returned Value:

VoidPtr: An I.D. of the constructed Z buffer.


Keywords:




GMZBufferInvert

(zbuffer.c:296)

Prototype:

  VoidPtr GMZBufferInvert(VoidPtr ZbufferID)


Description:

Invert the depth values. That is z -> -z.

Parameters:

ZbufferID: ID of the zbuffer to use.


Returned Value:

VoidPtr: An I.D. of the constructed Z buffer.


Keywords:




GMZBufferLaplacian

(zbuffer.c:365)

Prototype:

  VoidPtr GMZBufferLaplacian(VoidPtr ZbufferID)


Description:

Apply a Laplacian operator to the Z buffer.

Parameters:

ZbufferID: ID of the zbuffer to use.


Returned Value:

VoidPtr: An I.D. of the constructed Z buffer.


Keywords:




GMZBufferOGLClear

(zbuf_ogl.c:805)

Prototype:

  void GMZBufferOGLClear(void)


Description:

Clears the Z buffer to initialization state.

Parameters:

None


Returned Value:

void


Keywords:




GMZBufferOGLFlush

(zbuf_ogl.c:972)

Prototype:

  void GMZBufferOGLFlush(void)


Description:

Make sure all drawing commands are flushed and we are in sync.

Parameters:

None


Returned Value:

void


Keywords:




GMZBufferOGLInit

(zbuf_ogl.c:603)

Prototype:

  IritIntPtrSizeType GMZBufferOGLInit(int Width,
                                      int Height,
                                      IrtRType ZMin,
                                      IrtRType ZMax,
                                      int OffScreen)


Description:

Sets up the Zbuffer implementation. This one is employing Open GL.

Parameters:

Width, Height: idth and Height of the Z buffer.
ZMin, ZMax: Z domain that the Z buffer will have to support.
OffScreen: Z buffer should be hidden (TRUE) or displayed (FALSE).


Returned Value:

IritIntPtrSizeType: An I.D. of the constructed Z buffer.


Keywords:




GMZBufferOGLMakeActive

(zbuf_ogl.c:860)

Prototype:

  void GMZBufferOGLMakeActive(IritIntPtrSizeType Id)


Description:

Make active context. Once this function called drawing commands may be issued. Here, the drawing commands are in Open GL. Necessary only if other Open GL applications are active simultaneously.

Parameters:

Id: I.D. of the Zbuffer to activate.


Returned Value:

void


Keywords:




GMZBufferOGLQueryColor

(zbuf_ogl.c:943)

Prototype:

  void GMZBufferOGLQueryColor(IrtRType x,
                              IrtRType y,
                              int *Red,
                              int *Green,
                              int *Blue)


Description:

Returns the color at the given location in the Zbuffer.

Parameters:

x, y: The XY coordinates of the point to consider for color.
Red, Green, Blue: he color specifications.


Returned Value:

void


See Also:

GMZBufferOGLQueryZ

Keywords:




GMZBufferOGLQueryZ

(zbuf_ogl.c:891)

Prototype:

  IrtRType GMZBufferOGLQueryZ(IrtRType x, IrtRType y)


Description:

Returns depth at the given location in the Zbuffer.

Parameters:

x, y: The XY coordinates of the point to consider for visibility.


Returned Value:

IrtRType: The depth found at that XY location.


See Also:

GMZBufferOGLQueryColor

Keywords:




GMZBufferOGLSetColor

(zbuf_ogl.c:836)

Prototype:

  void GMZBufferOGLSetColor(int Red, int Green, int Blue)


Description:

Sets the colors of all drawing operations to come.

Parameters:

Red, Green, Blue: The color specifications, each between 0 and 255.


Returned Value:

void


Keywords:




GMZBufferQueryInfo

(zbuffer.c:442)

Prototype:

  VoidPtr GMZBufferQueryInfo(VoidPtr ZbufferID, int x, int y)


Description:

Returns the user information at the given location in the Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
x, y: The XY coordinates of the point to consider its info.


Returned Value:

VoidPtr: The pointer to the user infromation at that XY location.


Keywords:




GMZBufferQueryZ

(zbuffer.c:417)

Prototype:

  IrtRType GMZBufferQueryZ(VoidPtr ZbufferID, int x, int y)


Description:

Returns depth at the given location in the Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
x, y: The XY coordinates of the point to consider its depth.


Returned Value:

IrtRType: The depth found at that XY location.


Keywords:




GMZBufferRoberts

(zbuffer.c:326)

Prototype:

  VoidPtr GMZBufferRoberts(VoidPtr ZbufferID)


Description:

Apply a Roberts Edge detection operator to the Z buffer.

Parameters:

ZbufferID: ID of the zbuffer to use.


Returned Value:

VoidPtr: An I.D. of the constructed Z buffer.


Keywords:




GMZBufferSetUpdateFunc

(zbuffer.c:271)

Prototype:

  GMZBufferUpdateFuncType GMZBufferSetUpdateFunc(VoidPtr ZbufferID,
                                                 GMZBufferUpdateFuncType
                                                                      UpdateFunc)


Description:

Sets a call back function for each pixel update in the Z buffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
UpdateFunc: The call back function to invote for each pixel that is updated in the Z buffer.


Returned Value:

GMZBufferUpdateFuncType: Old call back function


Keywords:




GMZBufferSetZTest

(zbuffer.c:242)

Prototype:

  GMZTestsType GMZBufferSetZTest(VoidPtr ZbufferID, GMZTestsType ZTest)


Description:

Sets the Z testing option with the assumption that largers Z values mean closers to the viewer.

Parameters:

ZbufferID: ID of the zbuffer to use.
ZTest: The new Z test to consider.


Returned Value:

GMZTestsType: The old Z test used.


Keywords:




GMZBufferUpdateHLn

(zbuffer.c:548)

Prototype:

  void GMZBufferUpdateHLn(VoidPtr ZbufferID,
                          int x1,
                          int x2,
                          int y,
                          IrtRType z1,
                          IrtRType z2)


Description:

Set the depth for all points on a given horizontal line in the Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
x1, x2, y: The XY coordinates of the points on the horizontal line.
z1, z2: The new z's to set into the z buffer, if larger (==closer).


Returned Value:

void


See Also:

GMZBufferUpdatePt GMZBufferUpdateTri GMZBufferUpdateLine

Keywords:




GMZBufferUpdateInfo

(zbuffer.c:510)

Prototype:

  VoidPtr GMZBufferUpdateInfo(VoidPtr ZbufferID, int x, int y, VoidPtr Info)


Description:

Set new user information at the given location in the Zbuffer. This update always affects the Z buffer regardless of the depth.

Parameters:

ZbufferID: ID of the zbuffer to use.
x, y: The XY coordinates of the point to set its user information.
Info: The new user information to set into the z buffer.


Returned Value:

VoidPtr: Old user information.


See Also:

GMZBufferUpdatePt GMZBufferUpdateLn GMZBufferUpdateTri

Keywords:




GMZBufferUpdateLine

(zbuffer.c:608)

Prototype:

  void GMZBufferUpdateLine(VoidPtr ZbufferID,
                           int x1,
                           int y1,
                           int x2,
                           int y2,
                           IrtRType z1,
                           IrtRType z2)


Description:

Set the depth for all points on a givenline in the Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
x1, y1, x2, y2: The XY coordinates of the end points of the line.
z1, z2: The new z's to set into the z buffer, if larger (==closer).


Returned Value:

void


See Also:

GMZBufferUpdatePt GMZBufferUpdateHLn GMZBufferUpdateTri

Keywords:




GMZBufferUpdatePt

(zbuffer.c:474)

Prototype:

  IrtRType GMZBufferUpdatePt(VoidPtr ZbufferID, int x, int y, IrtRType z)


Description:

Set the depth at the given location in the Zbuffer. This update affects the Z buffer only if the z test succeeds.

Parameters:

ZbufferID: ID of the zbuffer to use.
x, y: The XY coordinates of the point to set its depth. No clipping/validity test is conducted to make sure that the point is inside the Z buffer!
z: The new z to set into the z buffer, if z test succeeds.


Returned Value:

IrtRType: Old Z value.


See Also:

GMZBufferUpdateInfo GMZBufferUpdateLn GMZBufferUpdateTri

Keywords:




GMZBufferUpdateTri

(zbuffer.c:709)

Prototype:

  void GMZBufferUpdateTri(VoidPtr ZbufferID,
                          int x1,
                          int y1,
                          IrtRType z1,
                          int x2,
                          int y2,
                          IrtRType z2,
                          int x3,
                          int y3,
                          IrtRType z3)


Description:

Set the depth for all points in a given triangular line in the Zbuffer.

Parameters:

ZbufferID: ID of the zbuffer to use.
x1, y1, z1: irst point of triangle.
x2, y2, z2: econd point of triangle.
x3, y3, z3: hird point of triangle.


Returned Value:

void


See Also:

GMZBufferUpdatePt GMZBufferUpdateeHLn GMZBufferUpdateLine

Keywords:




GeomDescribeError

(geom_err.c:77)

Prototype:

  const char *GeomDescribeError(GeomFatalErrorType ErrorNum)


Description:

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


GeomFatalError

(geom_ftl.c:56)

Prototype:

  void GeomFatalError(GeomFatalErrorType ErrID)


Description:

Trap Geom_lib errors right here. Provides a default error handler for the geom library. Gets an error description using GeomDescribeError, prints it and exit the program using exit.

Parameters:

ErrID: Error type that was raised.


Returned Value:

void


Keywords:

error handling


GeomSetFatalErrorFunc

(geom_ftl.c:28)

Prototype:

  GeomSetErrorFuncType GeomSetFatalErrorFunc(GeomSetErrorFuncType ErrorFunc)


Description:

Sets the error function to be used by Geom_lib.

Parameters:

ErrorFunc: New error function to use.


Returned Value:

GeomSetErrorFuncType: Old error function reference.


Keywords:

error handling


IGRedrawViewWindow

(anim_aux.c:27)

Prototype:

  void IGRedrawViewWindow(void)


Description:

Redraws the view window.

Parameters:

None


Returned Value:

void


Keywords:




PrimGenBOXObject

(primitv1.c:149)

Prototype:

  IPObjectStruct *PrimGenBOXObject(const IrtVecType Pt,
                                   IrtRType WidthX,
                                   IrtRType WidthY,
                                   IrtRType WidthZ)


Description:


  Routine to create a BOX geometric object defined by Pt - the minimum
3d point, and Width - Dx Dy & Dz vector.              4
  Order of vertices is as                         5       7
follows in the picture:                           |   6   |
                                                  |   |   |
(Note vertex 0 is hidden behind edge 2-6)         |   |   |
                                                  1   |   3
                                                      2

All dimensions can be negative, denoting the reversed direction.

Parameters:

Pt: Low end corner of BOX.
WidthX: Width of BOX (X axis).
WidthY: Depth of BOX( Y axis).
WidthZ: Height of BOX( Z axis).


Returned Value:

IPObjectStruct *: A BOX primitive


See Also:

PrimSetGeneratePrimType PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject PrimGenBOXWIREObject

Keywords:

box primitives


PrimGenBOXWIREObject

(primitv1.c:240)

Prototype:

  IPObjectStruct *PrimGenBOXWIREObject(const IrtVecType Pt,
                                       IrtRType WidthX,
                                       IrtRType WidthY,
                                       IrtRType WidthZ)


Description:


  Routine to create a BOX Wireframe geometric object defined by Pt - the
minimum 3d point, and Width - Dx Dy & Dz vector.      4
  Order of vertices is as                         5       7
follows in the picture:                           |   6   |
                                                  |   |   |
(Note vertex 0 is hidden behind edge 2-6)         |   |   |
                                                  1   |   3
                                                      2

All dimensions can be negative, denoting the reversed direction.

Parameters:

Pt: Low end corner of BOX.
WidthX: Width of BOX (X axis).
WidthY: Depth of BOX( Y axis).
WidthZ: Height of BOX( Z axis).


Returned Value:

IPObjectStruct *: A BOX primitive


See Also:

PrimSetGeneratePrimType PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject PrimGenBOXObject

Keywords:

box primitives


PrimGenCONE2Object

(primitv1.c:582)

Prototype:

  IPObjectStruct *PrimGenCONE2Object(const IrtVecType Pt,
                                     const IrtVecType Dir,
                                     IrtRType R1,
                                     IrtRType R2,
                                     int Bases)


Description:

Routine to create a truncated CONE, CON2, geometric object defined by Pt - the base 3d center point, Dir - the cone direction and height, and two base radii R1 and R2. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Pt: Center location of Base of CON2.
Dir: Direction and distance from Pt to center of other base of CON2.
R1, R2: Two base radii of the truncated CON2
Bases: 0 for none, 1 for bottom, 2 for top, 3 for both.


Returned Value:

IPObjectStruct *: A CON2 Primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject

Keywords:

cone primitives


PrimGenCONEObject

(primitv1.c:392)

Prototype:

  IPObjectStruct *PrimGenCONEObject(const IrtVecType Pt,
                                    const IrtVecType Dir,
                                    IrtRType R,
                                    int Bases)


Description:

Routine to create a CONE geometric object defined by Pt - the base 3d center point, Dir - the cone direction and height, and base radius R. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Pt: Center location of Base of CONE.
Dir: Direction and distance from Pt to apex of CONE.
R: Radius of Base of the cone.
Bases: 0 for none, 1 for bottom, 2 for top, 3 for both.


Returned Value:

IPObjectStruct *: A CONE Primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject

Keywords:

cone primitives


PrimGenCYLINObject

(primitv1.c:797)

Prototype:

  IPObjectStruct *PrimGenCYLINObject(const IrtVecType Pt,
                                     const IrtVecType Dir,
                                     IrtRType R,
                                     int Bases)


Description:

Routine to create a CYLINder geometric object defined by Pt - the base 3d center point, Dir - the cylinder direction and height, and radius R. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Pt: Center location of Base of CYLINder.
Dir: Direction and distance from Pt to other base of cylinder.
R: Radius of Base of the cylinder.
Bases: 0 for none, 1 for bottom, 2 for top, 3 for both.


Returned Value:

IPObjectStruct *: A CYLINDER Primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenSPHEREObject PrimGenTORUSObject

Keywords:

cylinder primitives


PrimGenEXTRUDEObject

(primitv2.c:441)

Prototype:

  IPObjectStruct *PrimGenEXTRUDEObject(const IPObjectStruct *Cross,
                                       const IrtVecType Dir,
                                       int Bases)


Description:

Routine to a create an extrusion surface out of the given cross section and the given direction. Input can either be a polygon/line or a freefrom curve object. If input is a polyline/gon, it must never be coplanar with Dir. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Cross: To extrude in direction Dir.
Dir: Direction and magnitude of extrusion.
Bases: 0 for none, 1 for bottom, 2 for top, 3 for both.


Returned Value:

IPObjectStruct *: An extrusion surface.


See Also:

PrimSetResolution PrimGenSURFREVObject PrimGenSURFREVAxisObject PrimGenSURFREV2Object PrimGenSURFREV2AxisObject PrimGenRULEDObject

Keywords:

extrusion surface primitives


PrimGenFrameController

(primitv3.c:919)

Prototype:

  IPObjectStruct *PrimGenFrameController(IrtRType BBoxLen,
                                         IrtRType NLeverLen,
                                         IrtRType TLeverLen,
                                         const char *HandleName)


Description:

Constructs a frame handle with axes parallel to XYZ, at the origin.

Parameters:

BBoxLen: The length along the X axis of the deformed object.
NLeverLen: The length of the normal Levers.
TLeverLen: The length of the tangent Lever.
HandleName: The name of the handle, required for naming sub-objects.


Returned Value:

IPObjectStruct *: A list object with the proper sub-objects named as O for the sphere Object in the origin, for objects of T/N/B levers.


See Also:

PrimGenTransformController PrimGenTransformController2DCrvs

Keywords:




PrimGenGBOXObject

(primitv1.c:302)

Prototype:

  IPObjectStruct *PrimGenGBOXObject(const IrtVecType Pt,
                                    const IrtVecType Dir1,
                                    const IrtVecType Dir2,
                                    const IrtVecType Dir3)


Description:

Routine to create a GBOX geometric object defined by Pt - the minimum 3d point, and 3 direction Vectors Dir1, Dir2, Dir3. If two of the direction vectors are parallel the GBOX degenerates to a zero volume object. A NULL pointer is returned in that case.
                                                      4
Order of vertices is as                           5       7
follows in the picture:                           |   6   |
                                                  |   |   |
(Note vertex 0 is hidden behind edge 2-6)         |   |   |
                                                  1   |   3
                                                      2


Parameters:

Pt: Low end corner of GBOX.
Dir1, Dir2, Dir3: Three independent directional vectors to define GBOX.


Returned Value:

IPObjectStruct *: A GBOX primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject

Keywords:

general box box primitives


PrimGenObjectFromPolyList

(primitv1.c:1612)

Prototype:

  IPObjectStruct *PrimGenObjectFromPolyList(IPObjectStruct *PObjList)


Description:


Routine to create an OBJECT directly from set of specified polys. No test is made for the validity of the model in any sense.

Parameters:

PObjList: List of polygonal objects.


Returned Value:

IPObjectStruct *: A single object containing all polygons in all provided objects, by a simple union.


Keywords:

primitives


PrimGenPOLYDISKObject

(primitv1.c:1405)

Prototype:

  IPObjectStruct *PrimGenPOLYDISKObject(const IrtVecType Nrml,
                                        const IrtVecType Trns,
                                        IrtRType R)


Description:

Routine to create a POLYDISK geometric object defined by the normal N and the translation vector T. The object is a planar disk (a circle of _PrimGlblResolution points in it...) and its radius is equal to R. The normal direction is assumed to point to the inside of the object. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Nrml: Normal to the plane this disk included in.
Trns: A translation factor of the center of the disk.
R: Radius of the disk.


Returned Value:

IPObjectStruct *: A single polygon object - a disk.


Keywords:

disk primitives


PrimGenPOLYGONObject

(primitv1.c:1480)

Prototype:

  IPObjectStruct *PrimGenPOLYGONObject(IPObjectStruct *PObjList, int IsPolyline)


Description:

Routine to create a POLYGON/LINE directly from its specified vertices. The validity of the elements in the provided list is tested to make sure they are vectors or points. No test is made to make sure all vertices are on one plane, and that no two vertices are similar.

Parameters:

PObjList: List of vertices/points to construct as a polygon/line.
IsPolyline: If TRUE, make a polyline, otherwise a polygon.


Returned Value:

IPObjectStruct *: A polygon/line constructed from PObjList.


Keywords:

polygon polyline primitives


PrimGenPolygon3Vrtx

(primitv1.c:1850)

Prototype:

  IPPolygonStruct *PrimGenPolygon3Vrtx(const IrtVecType V1,
                                       const IrtVecType V2,
                                       const IrtVecType V3,
                                       const IrtVecType Vin,
                                       int *VrtcsRvrsd,
                                       IPPolygonStruct *Pnext)


Description:

Routine to create a polygon out of a list of 3 vertices V1/2/3. The fourth vertex is inside (actually, this is not true, as this point will be in the positive part of the plane, which only locally in the object...) the object, so the polygon's normal direction can be evaluated uniquely. No test is made to make sure the 3 points are not co-linear... The points are placed in order.

Parameters:

V1, V2, V3: Three vertices of the constructed polygon.
Vin: A vertex that can be assumed to be inside the object for normal evaluation of the plane of polygon. Can be NULL in which case vrtcs order is kept.
VrtcsRvrsd: set to TRUE if has Vin and order of vertices is oriented in reverse. Can be NULL to be ignored. M
Pnext: Next is chain of polygons, in linked list.


Returned Value:

IPPolygonStruct *: The constructed polygon.


See Also:

PrimGenPolygon4Vrtx GMGenPolyline2Vrtx

Keywords:




PrimGenPolygon4Vrtx

(primitv1.c:1715)

Prototype:

  IPPolygonStruct *PrimGenPolygon4Vrtx(const IrtVecType V1,
                                       const IrtVecType V2,
                                       const IrtVecType V3,
                                       const IrtVecType V4,
                                       const IrtVecType Vin,
                                       int *VrtcsRvrsd,
                                       IPPolygonStruct *Pnext)


Description:

Routine to create a polygon out of a list of 4 vertices V1/2/3/4. The fifth vertex is inside (actually, this is not true, as this point will be in the positive part of the plane, which only locally in the object...) the object, so the polygon's normal direction can be evaluated uniquely. No test is made to make sure the 4 points are co-planar... The points are placed in order.

Parameters:

V1, V2, V3, V4: Four vertices of the constructed polygon.
Vin: A vertex that can be assumed to be inside the object for normal evaluation of the plane of polygon. Can be NULL in which case vrtcs order is kept.
VrtcsRvrsd: Set to TRUE if has Vin and order of vertices is oriented in reverse. Can be NULL to be ignored.
Pnext: Next is chain of polygons, in linked list.


Returned Value:

IPPolygonStruct *: The constructed polygon.


See Also:

PrimGenPolygon3Vrtx PrimGenPolygon4Vrtx2 GMGenPolyline2Vrtx

Keywords:




PrimGenPolygon4Vrtx2

(primitv1.c:1760)

Prototype:

  IPPolygonStruct *PrimGenPolygon4Vrtx2(const IrtVecType V1,
                                        const IrtVecType V2,
                                        const IrtVecType V3,
                                        const IrtVecType V4,
                                        const IrtVecType Vin,
                                        int *VrtcsRvrsd,
                                        int *Singular,
                                        IPPolygonStruct *Pnext)


Description:

Routine to create a polygon out of a list of 4 vertices V1/2/3/4. The fifth vertex is inside (actually, this is not true, as this point will be in the positive part of the plane, which only locally in the object...) the object, so the polygon's normal direction can be evaluated uniquely. No test is made to make sure the 4 points are co-planar... The points are placed in order.

Parameters:

V1, V2, V3, V4: Four vertices of the constructed polygon.
Vin: A vertex that can be assumed to be inside the object for normal evaluation of the plane of polygon. Can be NULL in which case vrtcs order is kept.
VrtcsRvrsd: Set to TRUE if has Vin and order of vertices is oriented in reverse. Can be NULL to be ignored.
Singular: -1 if regular, index of singular vertex if this rectangle is singular and a triangle is returned.
Pnext: Next is chain of polygons, in linked list.


Returned Value:

IPPolygonStruct *: The constructed polygon.


See Also:

PrimGenPolygon3Vrtx PrimGenPolygon4Vrtx GMGenPolyline2Vrtx

Keywords:




PrimGenPolyline4Vrtx

(primitv3.c:997)

Prototype:

  IPPolygonStruct *PrimGenPolyline4Vrtx(const IrtVecType V1,
                                        const IrtVecType V2,
                                        const IrtVecType V3,
                                        const IrtVecType V4,
                                        IPPolygonStruct *Pnext)


Description:

Routine to create a polyline out of a list of 4 vertices V1/2/3/4. No test is made to make sure the 4 points are co-planar... The points are placed in order.

Parameters:

V1, V2, V3, V4: Four vertices of the constructed polyline. V1 is duplicated as fifth last point as well.
Pnext: Next is chain of polyline, in linked list.


Returned Value:

IPPolygonStruct *: The constructed polygon.


See Also:

PrimGenPolyline4Vrtx PrimGenPolygon3Vrtx GMGenPolyline2Vrtx

Keywords:




PrimGenRULEDObject

(primitv2.c:685)

Prototype:

  IPObjectStruct *PrimGenRULEDObject(const IPObjectStruct *Cross1,
                                     const IPObjectStruct *Cross2)


Description:

Routine to a create a ruled surface out of the given two cross sections.

Parameters:

Cross1, Cross2: Polylines to rule a surface between. If both cross sections are in the XY plane, a single planar polygon is constructed. Otherwise, the number of vertices in Cross1 and Cross2 must be equal and a rectangular polygon is constructed for each edge.


Returned Value:

IPObjectStruct *: A single polygon representing the ruled surface.


See Also:

PrimSetResolution PrimGenSURFREVObject PrimGenSURFREVAxisObject PrimGenSURFREV2Object PrimGenSURFREV2AxisObject PrimGenEXTRUDEObject

Keywords:

ruled surface primitives


PrimGenSPHEREObject

(primitv1.c:1014)

Prototype:

  IPObjectStruct *PrimGenSPHEREObject(const IrtVecType Center, IrtRType R)


Description:

Routine to create a SPHERE geometric object defined by Center, the center of the sphere and R, its radius. See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Center: Center location of SPHERE.
R: Radius of sphere.


Returned Value:

IPObjectStruct *: A SPHERE Primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenTORUSObject

Keywords:

sphere primitives


PrimGenSURFREV2AxisObject

(primitv2.c:391)

Prototype:

  IPObjectStruct *PrimGenSURFREV2AxisObject(IPObjectStruct *Cross,
                                            IrtRType StartAngle,
                                            IrtRType EndAngle,
                                            const IrtVecType Axis)


Description:

Routine to a create surface of revolution by rotating the given cross section along the Axis axis. Input can either be a polygon/line or a freefrom curve object.

Parameters:

Cross: To rotate around Axis axis forming a surface of revolution.
StartAngle, EndAngle: angles of portion of surface of revolution, in degrees, between 0 and 360.
Axis: Axis of rotation.


Returned Value:

IPObjectStruct *: A (portion of) a surface of revolution.


See Also:

PrimSetResolution PrimGenSURFREVObject PrimGenSURFREVAxisObject PrimGenSURFREV2Object PrimGenEXTRUDEObject PrimGenRULEDObject

Keywords:

surface of revolution primitives


PrimGenSURFREV2Object

(primitv2.c:234)

Prototype:

  IPObjectStruct *PrimGenSURFREV2Object(const IPObjectStruct *Cross,
                                        IrtRType StartAngle,
                                        IrtRType EndAngle)


Description:

Routine to a create surface of revolution by rotating the given cross section along the Z axis, from StartAngle to EndAngle. Input can either be a polygon/line or a freefrom curve object. If input is a polyline/gon, it must never be coplanar with the Z axis.

Parameters:

Cross: To rotate around the Z axis forming a surface of revolution.
StartAngle, EndAngle: angles of portion of surface of revolution, in degrees, between 0 and 360.


Returned Value:

IPObjectStruct *: A (portion of) a surface of revolution.


See Also:

PrimSetResolution PrimGenSURFREVObject PrimGenSURFREVAxisObject PrimGenSURFREV2AxisObject PrimGenEXTRUDEObject PrimGenRULEDObject

Keywords:

surface of revolution primitives


PrimGenSURFREVAxisObject

(primitv2.c:186)

Prototype:

  IPObjectStruct *PrimGenSURFREVAxisObject(IPObjectStruct *Cross,
                                           const IrtVecType Axis)


Description:

Routine to a create surface of revolution by rotating the given cross section along the Axis axis. Input can either be a polygon/line or a freefrom curve object.

Parameters:

Cross: To rotate around Axis axis forming a surface of revolution.
Axis: Axis of rotation.


Returned Value:

IPObjectStruct *: A surface of revolution.


See Also:

PrimSetResolution PrimGenSURFREVObject PrimGenSURFREV2Object PrimGenSURFREV2AxisObject PrimGenEXTRUDEObject PrimGenRULEDObject

Keywords:

surface of revolution primitives


PrimGenSURFREVObject

(primitv2.c:44)

Prototype:

  IPObjectStruct *PrimGenSURFREVObject(const IPObjectStruct *Cross)


Description:

Routine to a create surface of revolution by rotating the given cross section along the Z axis. Input can either be a polygon/line or a freefrom curve object. If input is a polyline/gon, it must never be coplanar with the Z axis.

Parameters:

Cross: To rotate around the Z axis forming a surface of revolution.


Returned Value:

IPObjectStruct *: A surface of revolution.


See Also:

PrimSetResolution PrimGenSURFREVAxisObject PrimGenSURFREV2Object PrimGenSURFREV2AxisObject PrimGenEXTRUDEObject PrimGenRULEDObject

Keywords:

surface of revolution primitives


PrimGenTORUSObject

(primitv1.c:1233)

Prototype:

  IPObjectStruct *PrimGenTORUSObject(const IrtVecType Center,
                                     const IrtVecType Normal,
                                     IrtRType Rmajor,
                                     IrtRType Rminor)


Description:

Routine to create a TORUS geometric object defined by Center - torus 3d center point, the main torus plane normal Normal, major radius Rmajor and minor radius Rminor (Tube radius). Teta runs on the major circle, Fee on the minor one. Then
X = (Rmajor + Rminor * cos(Fee)) * cos(Teta)
Y = (Rmajor + Rminor * cos(Fee)) * sin(Teta)
Z = Rminor * sin(Fee)

See also PrimSetResolution on fineness control of approximation of the primitive using flat faces.

Parameters:

Center: Center location of the TORUS primitive.
Normal: Normal to the major plane of the torus.
Rmajor: Major radius of torus.
Rminor: Minor radius of torus.


Returned Value:

IPObjectStruct *: A TOURS Primitive.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject

Keywords:

torus primitives


PrimGenTransformController2D

(primitv3.c:120)

Prototype:

  IPObjectStruct *PrimGenTransformController2D(const GMBBBboxStruct *BBox,
                                               int HasRotation,
                                               int HasTranslation,
                                               int HasScale)


Description:

Constructs a 2D bounding box with transformation handles to control the way an object is transformed in the plane.

Parameters:

BBox: Dimensions of constructed box.
HasRotation: Should we add rotational handles?
HasTranslation: Should we add translation handles?
HasScale: Should we add scale handles?


Returned Value:

IPObjectStruct *: A list object with the proper sub-objects named as R for (Z) rotations, {X,Y} for translations.


See Also:

PrimGenTransformController PrimGenTransformController2DCrvs

Keywords:




PrimGenTransformController2DCrvs

(primitv3.c:260)

Prototype:

  IPObjectStruct *PrimGenTransformController2DCrvs(const GMBBBboxStruct *BBox)


Description:

Constructs a 2D bounding box with transformation handles to control the way an object is transformed in the plane. This transform is formed out of curves only.

Parameters:

BBox: Dimensions of constructed box (only XY).


Returned Value:

IPObjectStruct *: A list object with the proper sub-objects named as R for (Z) rotations, {X,Y} for translations


See Also:

PrimGenTransformController PrimGenTransformController2D

Keywords:




PrimGenTransformControllerBox

(primitv3.c:617)

Prototype:

  IPObjectStruct *PrimGenTransformControllerBox(const GMBBBboxStruct *BBox,
                                                int HasRotation,
                                                int HasTranslation,
                                                int HasUniformScale,
                                                IrtRType BoxOpacity,
                                                IrtRType RelTesalate)


Description:

Constructs a bounding box with transformation handles to control the way an object is transformed.

Parameters:

BBox: Dimensions of constructed box.
HasRotation: Should we add rotational handles?
HasTranslation: Should we add translation handles?
HasUniformScale: Should we add uniform scale handles?
BoxOpacity: Opacity of the bbox itself, between zero and one. If one, no bbox geometry is created.
RelTesalate: Relative tessallations of elements of the handles. 1.0 for default values.


Returned Value:

IPObjectStruct *: A list object with the proper sub-objects named as R{X,Y,Z} for rotations, T{X,Y,Z} for translations, and SXYZ for scaling.


See Also:

PrimGenTransformController2D PrimGenTransformController2DCrvs PrimGenTransformControllerSphere

Keywords:




PrimGenTransformControllerSphere

(primitv3.c:435)

Prototype:

  IPObjectStruct *PrimGenTransformControllerSphere(const GMBBBboxStruct *BBox,
                                                   int HasRotation,
                                                   int HasTranslation,
                                                   int HasUniformScale,
                                                   IrtRType BoxOpacity,
                                                   IrtRType RelTesalate)


Description:

Constructs a bounding box with transformation handles to control the way an object is transformed.

Parameters:

BBox: Dimensions of constructed box.
HasRotation: Should we add rotational handles?
HasTranslation: Should we add translation handles?
HasUniformScale: Should we add uniform scale handles?
BoxOpacity: Opacity of the bbox itself, between zero and one. If one, no bbox geometry is created.
RelTesalate: Relative tessallations of elements of the handles. 1.0 for default values.


Returned Value:

IPObjectStruct *: A list object with the proper sub-objects named as R{X,Y,Z} for rotations, T{X,Y,Z} for translations, and SXYZ for scaling.


See Also:

PrimGenTransformController2D PrimGenTransformController2DCrvs PrimGenTransformControllerBox

Keywords:




PrimSetGeneratePrimType

(primitv1.c:73)

Prototype:

  int PrimSetGeneratePrimType(int SetGeneratePrimitive)


Description:

Sets the way primitives are constructed - as polygons, as a freeform surface, or as a model surface.

Parameters:

SetGeneratePrimitive: 0 - polygonal primitive. 1 - surface primitive. 2 - model primitive. 3 - trivariate volumetric primitive. 4 - VModel primitive. 5 - Singular (having locations with vanishing Jacobian) primitive.


Returned Value:

int: Old value of PolygonalPrimitive flag.


See Also:

PrimSetSurfacePrimitiveRational PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject

Keywords:




PrimSetResolution

(primitv1.c:1946)

Prototype:

  int PrimSetResolution(int Resolution)


Description:

Routine to set the polygonal resolution (fineness). Resolution sroutghly the number of edges a circular primitive will have along the entire circle.

Parameters:

Resolution: To set as new resolution for all primitve constructors.


Returned Value:

int: Old resolution value.


Keywords:

primitives resolution


PrimSetSurfacePrimitiveRational

(primitv1.c:105)

Prototype:

  int PrimSetSurfacePrimitiveRational(int SurfaceRational)


Description:

Sets the way surface primitives are constructed - as exact rational form or approximated polynomial (integral) form.

Parameters:

SurfaceRational: TRUE for rational, FALSE for integral form.


Returned Value:

int: Old value of PolygonalPrimitive flag.


See Also:

PrimSetGeneratePrimType PrimGenBOXObject PrimGenGBOXObject PrimGenCONEObject PrimGenCONE2Object PrimGenCYLINObject PrimGenSPHEREObject PrimGenTORUSObject

Keywords:




TriangulatePolygonIndices

(poly_tri.c:272)

Prototype:

  static int *TriangulatePolygonIndices(const CagdPolylineStruct *P,
                                        const IPPolygonStruct *IrtP,
                                        CagdBType EnsureNoLeakingTrs,
                                        int *NumTriangles)


Description:

Triangulates a closed polygon. The triangulation based on the paper: Klincsek, G.T. (1980), Minimal triangulations of polygonal domains, Annals of Discrete Mathematics 9, 121-123 The used weight function is: 0.75 * TriangleArea + 0.05 * TrianglePerimeter + 0.10 * EdgesMaxMinRatio + 0.10 * AnglesMaxMinRatio

Parameters:

P, IrtP: A polygon to triangulate. (in two representations - for efficiency)
EnsureNoLeakingTrs: f TRUE, the weight function gives a weight of infinity to triangles that leak of the polygon.
NumTriangles: n output parameter that stores the number of generated Triangles.


Returned Value:

int *: List of triangle indices orginazied in tuples of three. Each index refers to a vertex in the input polygon. Each Three consequence indices forms a triangle.


See Also:

TriangulatePolygon

Keywords:




_GMFitGetFittingModel

(fit2pts.c:265)

Prototype:

  const GMFitFittingShapeStruct *_GMFitGetFittingModel(GMFittingModelType
                                                                   FittingModel)


Description:

This function returns the matching GMFitFittingShapeStruct to the given enum, or NULL if none exist. THIS POINTER MUST NOT BE FREED!!!

Parameters:

FittingModel: he enum of the needed fitting model.


Returned Value:

const GMFitFittingShapeStruct *: A pointer to a staticly allocated fitting struct.


See Also:

FitData FitDataWithOutliers

Keywords:




main

(geom_bsc.c:3848)

Prototype:

  void main(void)


Description:

Test routines for the polynomial equation solvers.

Parameters:

None


Returned Value:

void


Keywords: