# SUBSYSTEM OVERVIEW

Geometry Data Exchange (GDX) Subsystem

The GDX subsystem provides support for evaluation, approximation, and modification of GDX geometry and topology entities. Following is a listing of functions and tolerances used in the GDX subsystem.

# MODEL ACCESS

The following functions are used to manage GDX models:

gdx_InitModelInfo

Setup the information for a GDX model

gdx_GetDDF

Get the GDX DDF

gdx_RestoreModel

Reads a GDX model. Has special GDX specific Attribute and Precision handling that mda_RestoreModel does not have.

gdx_SaveModel

Writes a GDX model. Has special GDX specific Attribute and Precision handling that mda_SaveModel does not have.

# ENTITY EVALUATION

The following functions evaluate GDX entities:

gdx_CheckCurveDegenerate

Check if a GDX curve is degenerate

gdx_CheckSurfaceDegenerate

Check if a GDX surface is degenerate

gdx_EvalCurvePnt

Evaluate a point on a GDX curve

gdx_EvalCurveDerivs

Evaluate derivatives on a GDX curve

gdx_EvalSurfacePnt

Evaluate a point on a GDX surface

gdx_EvalSurfaceDerivs

Evaluate derivatives on a GDX surface

gdx_EvalSurfaceNormal

Evaluate a normal on a GDX surface

gdx_ProjectPointCurve

Project a point to a GDX curve

gdx_ProjectPointSurface

Project a point to a GDX surface

gdx_ProjectPointSurfaceGrid

Project a point to a GDX surface using a surface grid

# ENTITY CONVERSION

The following functions convert GDX entities from one form to another in the specified GDX model:

gdx_ConvertCurveToNurbCurve

Convert a GDX curve entity to a GDX NURB Curve

gdx_ConvertNurbCurveToCurve

Convert a GDX NURB Curve to a GDX curve

gdx_ConvertNurbCurveToUnifNurb

Converts a GDX NURB Curve to a uniform, unclamped GDX NURB Curve

gdx_ApproxNurbCurveAsParmSpl

Approximate a GDX NURB Curve as a GDX Spline Curve

gdx_ConvertSurfaceToNurbSurf

Convert a GDX surface entity to a GDX NURB Surface

gdx_ConvertNurbSurfToSurf

Convert a GDX NURB Surface to a GDX surface

gdx_ConvertNurbSurfToUnifNurb

Convert a GDX NURB Surface to a uniform unclamped GDX NURB Surface

gdx_ApproxNurbSurfAsParmSpl

Approximate a GDX NURB Surface as a GDX Spline Surface

# ENTITY TRANSFORMATION

The following functions apply a transformation matrix to the specified GDX entity:

gdx_TransformCurve

Apply a transformation matrix to a GDX curve entity

gdx_TransformSurface

Apply a transformation matrix to a GDX surface entity

# ENTITY ATTRIBUTES

The GDX Attributes entity defines attributes for curve and surface entities. The purpose of an attributes entity is to enable the transfer of entity related attributes from a Native System to the Target System. Internally, the GDX subsystem has a GDX attribute table which relates GDX Attributes to Native geometry pointers. Applications should not directly access the attribute table nor attributes in the table. They should be accessed via the functions described below.

GDX Attributes entities can be created while converting Native geometric entities to GDX entites. The function gcr_Attributes should be used to create a GDX Attributes entity from Native attribute information. Calls to gdx_AttributeAddToTable are used to add the attribute to a table that stores the relation between Native entity and GDX Attributes entities. To get the attribute data for use in the Target System, calls to gdx_EntityGetAttribute can be made. The SGDX and IGDX subsystems have functions to transfer the attributes. For more information on those interfaces, see sgdx_intro and igdx_intro.

The attribute table relates the attribute information when the GDX model is in memory. To save and restore the attribute information to and from a GDX saved model file, calls to the funcitons gdx_SaveModel and gdx_RestoreModel should be used. When doing so, the relation to Native geomotry will be lost. The attributes will now relate to GDX entities.

gdx_AttributeAddToTable

Adds a relation between Native-entity and GDX Attribute Entity to the Relation Table.

gdx_EntityGetAttribute

Gets the attribute entity from the ralation table using its native-entity

gdx_RestoreModel

Reads a GDX model. Has special GDX specific Attribute and Precision handling that mda_RestoreModel does not have.

gdx_SaveModel

Writes a GDX model. Has special GDX specific Attribute and Precision handling that mda_SaveModel does not have.

# SOLID and FACE MODIFICATION/MANIPULATION

The following functions operate on GDX Solid and Face entities:

gdx_FaceBoundSurf

Rebound the surface of a face

gdx_FaceConvertCurvesToNurbs

Convert the model and/or parm curves in a face to nurbs curves

gdx_FaceConvertSurfToNurb

Convert the surface in a face to a nurbs surface

gdx_FaceCreateVertices

Generate vertices for a face

gdx_FaceDeleteModelCurves

Delete the model curves within a Face

gdx_FaceDeleteParmCurves

Delete the parm curves within a Face

gdx_FaceExtractSurface

Extract surface and replace in face

gdx_FaceExtractSurface2

Extract surface and replace in face

gdx_FaceGenerateModelCurves

Generate the new model curves within a Face

gdx_FaceGenerateParmCurves

Generate the new parm curves within a Face

gdx_FaceImproveInOutLoopDir

Improve loop directions for a Face

gdx_FaceImproveModelLoopCont

Improve loop continuity by senses and order in model space for a face

gdx_FaceImproveParmLoopCont

Improve loop continuity by senses and order in parm space for a face

gdx_FaceImproveTrim

Improve the loop direction or surface normal to ensure face is trimmed

gdx_FaceIsolateSharedSurf

Duplicate a surface if shared by more than one face

gdx_FaceMakeECSenseTrue

For each Edge Curve in an Edge, force the Edge Curve sense to be true.

gdx_FaceMakeLoopSenseTrue

For each loop in face, force the loop sense to be true.

gdx_FaceMakeSurfG1Cont

Ensure that surface of a face is G1 continuous

gdx_FaceMakeModelCurveG1Cont

Ensure that model curve in each edge is G1 continuous

gdx_FaceModelParmAgree

Make the model and parm curves agree for a face

gdx_FaceModelTCToCurve

Convert all Trim Curves in the face to explicit curves.

gdx_FaceNurbCurvesToNurbs

Make all the curves with in a face topology NURBS curves.

gdx_FaceNurbCurvesToSplines

Make all the NURBS curves in a face Spline curves.

gdx_FaceNurbSurfToNurb

Change the form of the NURBS surface within a face

gdx_FaceNurbSurfToSpline

Convert the NURBS surface in a face to a spline surface.

gdx_FaceNurbsToNurbs

Change the form of the NURBS curves and surfaces within a face

gdx_FaceNurbsToSplines

Convert the all NURBS curves and surface in a face to a splines

gdx_FacePlaneSurfToNurb

Convert the planar surface in a face to NURBS

gdx_FaceRTSToSurface

Convert a face with a rect trim surface to a face with explicit surface.

gdx_FaceRemoveDegenEdges

Remove edges that are degenerate from a face

gdx_FaceRemoveDegenLoops

Remove degenerate loops from a face.

gdx_FaceRemovePoles

Remove edges that are poles

gdx_FaceRemoveSeamCrossings

Modify face so that loops do not cross the seams of closed surfaces

gdx_FaceReplaceSurf

Replace a surface in a face and its sub-entities with a new surface

gdx_FaceReverseFace.c

Make a face point the oposite direction

gdx_FaceReverseLoops.c

Reverse all loops in a gdx face

gdx_FaceRotateSurfFromSeam

Rotate a surface for a face so that the seam crossing could be avoided

gdx_FaceSplitCCParmCurves

Split all edge curves that contain composite curves as parameter space curves for a face

gdx_FaceSplitClosedSurfs

Split face if it contains a closed surface into multiple faces to remove the closed surface

gdx_FaceSplitDiscontSurfs

Split face if it contains a discontinuous surface into multiple faces to remove the discontinuous surface

gdx_FaceSplitModelCurves

Split model curves in the face, and generate an edge for each new model curve. Closed curves or discontinuous curves can be split.

gdx_FaceSurfImproveNurbParams

Improve the parameterization of nurb surfaces in a face.

gdx_FaceToCurveMesh

Approximate a face as a grid of lines and the face boundaries

gdx_FaceToPolyShell

Convert a face to a polyshell. Similar to faceted approximation.

gdx_SolidBoundSurf

Rebound the surfaces in a solid

gdx_SolidCheckEuler

Check a solid to determine if it conforms to the euler equation

gdx_SolidConvertToNurbSolid

Convert the entities within a solid to nurbs (curves and surfaces)

gdx_SolidCreateVertices

Generate vertices for a solid

gdx_SolidDeleteModelCurves

Delete the model curves within a solid

gdx_SolidDeleteParmCurves

Delete the parm curves within a solid

gdx_SolidDeleteVerticies

Delete the verticies within a solid

gdx_SolidGenerateModelCurves

Generate the new model curves within a solid

gdx_SolidGenerateParmCurves

Generate the new parm curves within a solid

gdx_SolidImproveOrients

Make all the faces in a solid point the same direction.

gdx_SolidImproveInOutLoopDir

Improve loop directions for a solid

gdx_SolidImproveModelLoopCont

Improve continuity of all loops in model space for a solid

gdx_SolidImproveParmLoopCont

Improve continuity of all loops in parm space for a solid

gdx_SolidImproveTrim

Improve the trimming of the faces

gdx_SolidIsolateSharedSurf

Duplicate a surface if shared by more than one face

gdx_SolidMakeECSenseTrue

For each Edge Curve in an Edge, force the Edge Curve sense to be true.

gdx_SolidMakeFaceSenseTrue

For each face in solid, force the face sense in shell to be true.

gdx_SolidMakeLoopSenseTrue

For each loop in solid, force the loop sense in face to be true.

gdx_SolidMakeSurfG1Cont

Ensure that each surface in the solid is G1 continuous.

gdx_SolidModelParmAgree

Make the model and parm curves agree for a solid

gdx_SolidModelTCToCurve

Convert all Trim Curves in the solid to explicit curves.

gdx_SolidNurbsToNurbs

Change the form of the NURBS curves and surfaces within a solid

gdx_SolidNurbsToSplines

Convert the all NURBS curves and surfaces in a solid to a splines

gdx_SolidRTSToSurface

Convert all retangular trimmed surfaces in a solid to explicit surfaces.

gdx_SolidRemoveDegenEdges

Remove edges that are degenerate from a solid

gdx_SolidRemoveSeamCrossing

Modify solid so that loops do not cross the seams of closed surfaces

gdx_SolidRemoveSharedSurface

Modify solid so that no two faces share the same surface

gdx_SolidRotateFaceSeams

Rotate closed surfaces within faces to get rid of seam crossings

gdx_SolidSplitCCParmCurves

Split all edge curves that contain composite curves as parameter space curves for a solid

gdx_SolidSplitClosedSurfs

Split all faces in a solid that contain a closed surface into multiple faces to remove the closed surfaces

gdx_SolidSplitDiscontSurfs

Split all faces in a solid that contain a discontinuous surface into multiple faces to remove the discontinuous surfaces

gdx_SolidSplitModelCurves

Split model curves in the solid, and generate an edge for each new model curve. Closed curves or discontinuous curves can be split.

gdx_SolidSurfImproveNurbParams

Improve the parameterization of nurb surfaces in each face.

gdx_SolidToPolyShell

Convert a solid to a polyshell. Similar to faceted approximation.

gdx_SolidToShells

Convert a solid to a list of shells.

# ENTITY MODIFICATION/MANIPULATION

The following functions operate on GDX curve and surface entities:

gdx_DeleteEntityFromParents

Delete a GDX entity from all its parents

gdx_ExtractSubCurveFromCurve

Extract a subcurve from a GDX curve

gdx_ExtractSubSurface

Extract a subsurface from a GDX NURB Surface

gdx_ExtractIsoCurve

Extract a GDX iso-parametric curve from a GDX surface

gdx_InsertKnotCurve

Insert a knot into a GDX NURB Curve multiple times

gdx_RemoveKnotsCurve

Perform knot removal on a GDX NURB Curve

gdx_InsertKnotSurface

Insert a knot into a GDX NURB Surface multiple times

gdx_RemoveKnotsSurface

Perform knot removal on a GDX NURB Surface

gdx_DiscontToContNurbCurve

Force a G0 discontinuous GDX NURB Curve to be continuous

gdx_MakeNurbCurveG1Cont

Make a GDX NURB Curve G1 continuous

gdx_DiscontToContNurbSurf

Force a G0 discontinuous GDX NURB Surface to be continuous

gdx_MakeNurbSurfG1Cont

Make a GDX NURB Surface G1 continuous

gdx_ReparmNurbCurve

Reparameterize a GDX NURB Curve

gdx_ReparmNurbSurf

Reparameterize a GDX NURB Surface

gdx_ReverseCurve

Reverse a GDX curve entity

gdx_SplitNurbCurveAtDiscont

Split a GDX NURB Curve at discontinuities

gdx_SplitNurbSurfAtDiscont

Split a GDX NURB Surface at discontinuities

# ENTITY LINEAR APPROXIMATION

The following function performs linear approximations of a GDX entity:

gdx_LinearApproxEntity

Linear approximate a GDX entity

# ENTITY FITTING

The following functions fit data to produce GDX entities in the current GDX model:

gdx_LeastSquaresNurbCurve

Least squares fit of data to produce a GDX NURB Curve

gdx_LeastSquaresNurbSurf

Least squares fit of data to produce a GDX NURB Surface

# ENTITY INTERPOLATION

The following functions interpolate data to produce GDX entities in the current GDX model:

gdx_NurbCurveThruNPoints

Interpolate data points to produce a GDX NURB Curve

# MISCELLANEOUS

The following miscellaneous functions are provided:

gdx_GetApproxCurveExtents

Get the approximate extents of a GDX curve

gdx_GetCurveClosure

Get the closure status of a GDX curve

gdx_GetCurveContinuity

Get the continuity of a GDX curve

gdx_GetCurveCurvature

Get the curvature of a GDX curve

gdx_GetCurveDegree

Get the degree of a GDX curve

gdx_GetCurvePBounds

Get the parametric bounds of a GDX curve

gdx_GetCurvePlanarity

Get the planarity of a GDX curve

gdx_GetCurveRationality

Get the rationality of a GDX curve

gdx_GetSurfaceClosure

Get the U and V closure status of a GDX surface

gdx_GetSurfContinuity

Get the continuity of a GDX surface

gdx_GetSurfCurvature

Get the curvature of a GDX surface

gdx_GetSurfaceDegree

Get the U and V degree of a GDX surface

gdx_GetSurfPBounds

Get the U and V parametric bounds of a GDX surface

gdx_ApplyMatrix3D

Apply a GDX matrix to 3D points

gdx_ApplyMatrix4D

Apply a GDX matrix to 4D points

gdx_GetNurbCurveContBounds

Get the NURBS curve continuous bounds values

gdx_GetNurbSurfContBounds

Get the NURBS surface continuous bounds values

gdx_IntersectNurbCurves

Find the intersections of two GDX NURB Curves

gdx_NormParmValue

Normalize a given parameter value

gdx_UnNormParmValue

Unnormalize a given parameter value

# MODEL CONVERSIONS

gdx_ModelConvertUnits

Convet the data to specified unit from unit in GDX_MODEL_VAR ent.

# TOLERANCING

The tolerances used by the GDX subsystem are assumed to pertain to an entire model. The tolerances for a model can be initialized by calling gdx_InitTolerances. The tolerances can also be individually set or retrieved using the mda_SetTol/mda_SetTol2 and mda_GetTol/mda_GetTol2 functions. Finally, the tolerances used by the GDX subsystem during entity approximation, conversion, or other manipulation are set using gdx_SetTolerances. The entity manipulating functions in the GDX subsystem assume that gdx_SetTolerances has been appropriately called.

The following functions apply to tolerancing:

gdx_InitTolerances

Initialize GDX tolerances for a model

gdx_SetTolerances

Set tolerance for use in the GDX subsystem

gdx_ClearTolerances

Clear the global tolerance setting

gdx_GetAngleTol

Get the current GDX ANGLE_TOL

gdx_GetConvergeTol

Get the current GDX CONVERGE_TOL

gdx_GetCurvatureTol

Get the current GDX CURVATURE_TOL

gdx_GetDerivativeTol

Get the current GDX DERIVATIVE_TOL

gdx_GetIntersectTol

Get the current GDX INTERSECT_TOL

gdx_GetModelSpacePntTol

Get the current GDX MODEL_SPACE_PNT_TOL

gdx_GetNormalMagTol

Get the current GDX NORMAL_MAG_TOL

gdx_GetParmSpacePntTol

Get the current GDX PARM_SPACE_PNT_TOL

gdx_GetTangentTol

Get the current GDX TANGENT_TOL

The tolerances used by the GDX subsystem can be accessed through the mda_SetTol, mda_SetTol2, mda_GetTol, and mda_GetTol2 functions. The following are the tolerance names, descriptions and default values used by the GDX subsystem:

Tolerance Name | Description | Default Value
ZERO_TOL | Absolute value which when | 1.0e-13
| less than will equal zero
MODEL_SPACE_PNT_TOL | Distance between model | 0.001
| space points which when
| less than makes the points
| equivalent. Restored and
| saved from a GDX model
| when gdx_RestoreModel or
| gdx_SaveModel is used
PARM_SPACE_PNT_TOL | Distance between parameter | 1.0e-8
| space points which when
| less than makes the points
| equivalent
ISO_PARM_TOL | When two surface parameter | 1.0e-8
| points differ by less than
| this value the points form
| a surface iso-parametric
| curve
CONVERGE_TOL | When the difference between | 1.0e-12
| two consecutive parametric
| values is less than this
| value non-convergence is
| defined
KNOT_TOL | When two knots differ by | 1.0e-10
| less than this value the
| knots are considered
| identical

Tolerance Name | Description | Default Value
INTERSECT_TOL | For intersections, the | 1.0e-12
| value that determines when
| two intersections are
| parametrically the same
PARALLEL_LINES_TOL | When the radian angle | 1.0e-7
| between two lines is less
| than this value the lines
| are considered parallel
ANGLE_TOL | When an radian angular | 1.0e-7
| differences is less than
| this value the angles are
| considered to be the same.
| Restored or saved from a
| GDX model when
| gdx_RestoreModel or
| gdx_SaveModel is used.
PNT_PROJ_TOL | When a point is project to | 1.0e-10
| a curve or surface and the
| difference between projected
| points is less than this
| value the projection is
| considered to have converged
COLLINEAR_TOL | The tolerance that | 1.0e-7
| determines when 3 points
| are colinear as the deviation
| of the dot product of the
| direction vectors from 1.0
COPLANAR_TOL | The tolerance that | 1.0e-8
| determines when 4 or more
| points are coplanar
NORMAL_MAG_TOL | When the magnitude for a normal | 1.0e-6
| is less than this value the
| normal is considered to have
| a zero magnitude

Tolerance Name | Description | Default Value
SINGULAR_TOL | When the magnitude of a matrix | 1.0e-10
| element for solving s set of
| equations is less than this
| value the solution is considered
| singular
TANGENT_TOL | When the radian angle | 1.0e-4
| between two tangents is
| less than this value
| the tangents are considered
| equal
CURVATURE_TOL | When the difference between | 1.0e-4
| two curvature values is less
| than this value the curvature
| is considered equal
DERIVATIVE_TOL | When the difference between | 0.001
| two derivatives is less than
| this value the derivatives
| are considered equal

See the manual pages for the full bindings.