3D Graphics Programming with QuickDraw 3D

4 Summary of Geometric Objects

4 C Summary

4 Constants

#define kQ3NURBCurveMaxOrder           16 /*maximum order for NURB curves*/
#define kQ3NURBPatchMaxOrder           11 /*maximum order for NURB patches*/
#define kQ3GeometryTypeBox             Q3_OBJECT_TYPE('b','o','x',' ')
#define kQ3GeometryTypeGeneralPolygon             Q3_OBJECT_TYPE('g','p','g','n')
#define kQ3GeometryTypeLine             Q3_OBJECT_TYPE('l','i','n','e')
#define kQ3GeometryTypeMarker             Q3_OBJECT_TYPE('m','r','k','r')
#define kQ3GeometryTypeMesh             Q3_OBJECT_TYPE('m','e','s','h')
#define kQ3GeometryTypeNURBCurve             Q3_OBJECT_TYPE('n','r','b','c')
#define kQ3GeometryTypeNURBPatch             Q3_OBJECT_TYPE('n','r','b','p')
#define kQ3GeometryTypePoint             Q3_OBJECT_TYPE('p','n','t',' ')
#define kQ3GeometryTypePolygon             Q3_OBJECT_TYPE('p','l','y','g')
#define kQ3GeometryTypePolyLine             Q3_OBJECT_TYPE('p','l','y','l')
#define kQ3GeometryTypeTriangle             Q3_OBJECT_TYPE('t','r','n','g')
#define kQ3GeometryTypeTriGrid             Q3_OBJECT_TYPE('t','r','i','g')
typedef enum TQ3PixelType {
 kQ3PixelTypeRGB32            /*32 bits per pixel*/
} TQ3PixelType;
typedef enum TQ3Endian {
 kQ3EndianBig,
 kQ3EndianLittle
} TQ3Endian;
typedef enum TQ3GeneralPolygonShapeHint {
 kQ3GeneralPolygonShapeHintComplex,
 kQ3GeneralPolygonShapeHintConcave,
 kQ3GeneralPolygonShapeHintConvex
} TQ3GeneralPolygonShapeHint;
typedef enum TQ3EndCapMasks {
 kQ3EndCapNone         = 0,
 kQ3EndCapMaskTop         = 1 << 0,
 kQ3EndCapMaskBottom         = 1 << 1
} TQ3EndCapMasks;

4 Data Types

typedef unsigned long               TQ3EndCap;

Points

typedef struct TQ3Point2D {
 float    x;
 float    y;
} TQ3Point2D;
typedef struct TQ3Point3D {
 float    x;
 float    y;
 float    z;
} TQ3Point3D;

Rational Points

typedef struct TQ3RationalPoint3D {
 float    x;
 float    y;
 float    w;
} TQ3RationalPoint3D;
typedef struct TQ3RationalPoint4D {
 float    x;
 float    y;
 float    z;
 float    w;
} TQ3RationalPoint4D;

Polar and Spherical Points

typedef struct TQ3PolarPoint {
 float    r;
 float    theta;
} TQ3PolarPoint;
typedef struct TQ3SphericalPoint {
 float    rho;
 float    theta;
 float    phi;
} TQ3SphericalPoint;

Vectors

typedef struct TQ3Vector2D {
 float    x;
 float    y;
} TQ3Vector2D;
typedef struct TQ3Vector3D {
 float    x;
 float    y;
 float    z;
} TQ3Vector3D;

Quaternions

typedef struct TQ3Quaternion {
 float    w;
 float    x;
 float    y;
 float    z;
} TQ3Quaternion;

Rays

typedef struct TQ3Ray3D {
 TQ3Point3D         origin;
 TQ3Vector3D         direction;
} TQ3Ray3D;

Parametric Points

typedef struct TQ3Param2D {
 float    u;
 float    v;
} TQ3Param2D;
typedef struct TQ3Param3D {
 float    u;
 float    v;
 float    w;
} TQ3Param3D;

Tangents

typedef struct TQ3Tangent2D {
 TQ3Vector3D         uTangent;
 TQ3Vector3D         vTangent;
} TQ3Tangent2D;
typedef struct TQ3Tangent3D {
 TQ3Vector3D         uTangent;
 TQ3Vector3D         vTangent;
 TQ3Vector3D         wTangent;
} TQ3Tangent3D;

Vertices

typedef struct TQ3Vertex3D {
 TQ3Point3D         point;
 TQ3AttributeSet         attributeSet;
} TQ3Vertex3D;

Matrices

typedef struct TQ3Matrix3x3 {
 float         value[3][3];
} TQ3Matrix3x3;
typedef struct TQ3Matrix4x4 {
 float         value[4][4];
} TQ3Matrix4x4;

Bitmaps and Pixel Maps

typedef struct TQ3Bitmap {
 unsigned char         *image;
 unsigned long         width;
 unsigned long         height;
 unsigned long         rowBytes;
 TQ3Endian         bitOrder;
} TQ3Bitmap;
typedef struct TQ3Pixmap {
 void         *image;
 unsigned long         width;
 unsigned long         height;
 unsigned long         rowBytes;
 unsigned long         pixelSize;
 TQ3PixelType         pixelType;
 TQ3Endian         bitOrder;
 TQ3Endian         byteOrder;
} TQ3Pixmap;
typedef struct TQ3StoragePixmap {
 TQ3StorageObject         image;
 unsigned long         width;
 unsigned long         height;
 unsigned long         rowBytes;
 unsigned long         pixelSize;
 TQ3PixelType         pixelType;
 TQ3Endian         bitOrder;
 TQ3Endian         byteOrder;
} TQ3StoragePixmap;

Areas and Plane Equations

typedef struct TQ3Area {
 TQ3Point2D         min;
 TQ3Point2D         max;
} TQ3Area;
typedef struct TQ3PlaneEquation {
 TQ3Vector3D         normal;
 float         constant;
} TQ3PlaneEquation;

Point Objects

typedef struct TQ3PointData {
 TQ3Point3D         point;
 TQ3AttributeSet         pointAttributeSet;
} TQ3PointData;

Lines

typedef struct TQ3LineData {
 TQ3Vertex3D         vertices[2];
 TQ3AttributeSet         lineAttributeSet;
} TQ3LineData;

Polylines

typedef struct TQ3PolyLineData {
 unsigned long         numVertices;
 TQ3Vertex3D         *vertices;
 TQ3AttributeSet         *segmentAttributeSet;
 TQ3AttributeSet         polyLineAttributeSet;
} TQ3PolyLineData;

Triangles

typedef struct TQ3TriangleData {
 TQ3Vertex3D         vertices[3];
 TQ3AttributeSet         triangleAttributeSet;
} TQ3TriangleData;

Simple Polygons

typedef struct TQ3PolygonData {
 unsigned long         numVertices;
 TQ3Vertex3D         *vertices;
 TQ3AttributeSet         polygonAttributeSet;
} TQ3PolygonData;

General Polygons

typedef struct TQ3GeneralPolygonContourData {
 unsigned long         numVertices;
 TQ3Vertex3D         *vertices;
} TQ3GeneralPolygonContourData;
typedef struct TQ3GeneralPolygonData {
 unsigned long          numContours;
 TQ3GeneralPolygonContourData          *contours;
 TQ3GeneralPolygonShapeHint          shapeHint;
 TQ3AttributeSet          generalPolygonAttributeSet;
} TQ3GeneralPolygonData;

Boxes

typedef struct TQ3BoxData {
 TQ3Point3D         origin;
 TQ3Vector3D         orientation;
 TQ3Vector3D         majorAxis;
 TQ3Vector3D         minorAxis;
 TQ3AttributeSet         *faceAttributeSet;
 TQ3AttributeSet         boxAttributeSet;
} TQ3BoxData;

Trigrids

typedef struct TQ3TriGridData {
 unsigned long         numRows;
 unsigned long         numColumns;
 TQ3Vertex3D         *vertices;
 TQ3AttributeSet         *facetAttributeSet;
 TQ3AttributeSet         triGridAttributeSet;
} TQ3TriGridData;

Meshes

typedef struct TQ3MeshComponentPrivate               *TQ3MeshComponent;
typedef struct TQ3MeshVertexPrivate               *TQ3MeshVertex;
typedef struct TQ3MeshVertexPrivate               *TQ3MeshFace;
typedef struct TQ3MeshEdgeRepPrivate               *TQ3MeshEdge;
typedef struct TQ3MeshContourPrivate               *TQ3MeshContour;
typedef struct TQ3MeshIterator {
 void         *var1;
 void         *var2;
 void         *var3;
 struct {
  void        *field1;
  char        field2[4];
 } var4;
} TQ3MeshIterator;

NURB Curves

typedef struct TQ3NURBCurveData {
 unsigned long         order;
 unsigned long         numPoints;
 TQ3RationalPoint4D         *controlPoints;
 float         *knots;
 TQ3AttributeSet         curveAttributeSet;
} TQ3NURBCurveData;

NURB Patches

typedef struct TQ3NURBPatchData {
 unsigned long          uOrder;
 unsigned long         vOrder;
 unsigned long         numRows;
 unsigned long         numColumns;
 TQ3RationalPoint4D         *controlPoints;
 float         *uKnots;
 float         *vKnots;
 unsigned long         numTrimLoops;
 TQ3NURBPatchTrimLoopData         *trimLoops;
 TQ3AttributeSet         patchAttributeSet;
} TQ3NURBPatchData;
typedef struct TQ3NURBPatchTrimLoopData {
 unsigned long            numTrimCurves;
 TQ3NURBPatchTrimCurveData            *trimCurves;
} TQ3NURBPatchTrimLoopData;
typedef struct TQ3NURBPatchTrimCurveData {
 unsigned long            order;
 unsigned long            numPoints;
 TQ3RationalPoint3D            *controlPoints;
 float            *knots;
} TQ3NURBPatchTrimCurveData;

Markers

typedef struct TQ3MarkerData {
 TQ3Point3D         location;
 long         xOffset;
 long         yOffset;
 TQ3Bitmap         bitmap;
 TQ3AttributeSet         markerAttributeSet;
} TQ3MarkerData;

4 Geometric Objects Routines

Managing Geometric Objects

TQ3ObjectType Q3Geometry_GetType (
TQ3GeometryObject geometry);
TQ3Status Q3Geometry_GetAttributeSet (
TQ3GeometryObject geometry, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Geometry_SetAttributeSet (
TQ3GeometryObject geometry, 
TQ3AttributeSet attributeSet);
TQ3Status Q3Geometry_Submit (TQ3GeometryObject geometry, 
TQ3ViewObject view);

Creating and Editing Points

TQ3GeometryObject Q3Point_New (const TQ3PointData *pointData);
TQ3Status Q3Point_Submit (const TQ3PointData *pointData, 
TQ3ViewObject view);
TQ3Status Q3Point_GetData (TQ3GeometryObject point, 
TQ3PointData *pointData);
TQ3Status Q3Point_SetData (TQ3GeometryObject point, 
const TQ3PointData *pointData);
TQ3Status Q3Point_EmptyData (TQ3PointData *pointData);
TQ3Status Q3Point_GetPosition (TQ3GeometryObject point, 
TQ3Point3D *position);
TQ3Status Q3Point_SetPosition (TQ3GeometryObject point, 
const TQ3Point3D *position);

Creating and Editing Lines

TQ3GeometryObject Q3Line_New (const TQ3LineData *lineData);
TQ3Status Q3Line_Submit (const TQ3LineData *lineData, 
TQ3ViewObject view);
TQ3Status Q3Line_GetData (TQ3GeometryObject line, 
TQ3LineData *lineData);
TQ3Status Q3Line_SetData (TQ3GeometryObject line, 
const TQ3LineData *lineData);
TQ3Status Q3Line_GetVertexPosition (
TQ3GeometryObject line, 
unsigned long index, 
TQ3Point3D *position);
TQ3Status Q3Line_SetVertexPosition (
TQ3GeometryObject line, 
unsigned long index, 
const TQ3Point3D *position);
TQ3Status Q3Line_GetVertexAttributeSet (
TQ3GeometryObject line, 
unsigned long index, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Line_SetVertexAttributeSet (
TQ3GeometryObject line,
unsigned long index,
TQ3AttributeSet attributeSet);
TQ3Status Q3Line_EmptyData (TQ3LineData *lineData);

Creating and Editing Polylines

TQ3GeometryObject Q3PolyLine_New (
const TQ3PolyLineData *polyLineData);
TQ3Status Q3PolyLine_Submit (const TQ3PolyLineData *polyLineData, 
TQ3ViewObject view);
TQ3Status Q3PolyLine_GetData (TQ3GeometryObject polyLine, 
TQ3PolyLineData *polyLineData);
TQ3Status Q3PolyLine_SetData (TQ3GeometryObject polyLine, 
const TQ3PolyLineData *polyLineData);
TQ3Status Q3PolyLine_EmptyData (TQ3PolyLineData *polyLineData);
TQ3Status Q3PolyLine_GetVertexPosition (
TQ3GeometryObject polyLine, 
unsigned long index, 
TQ3Point3D *position);
TQ3Status Q3PolyLine_SetVertexPosition (
TQ3GeometryObject polyLine, 
unsigned long index, 
const TQ3Point3D *position);
TQ3Status Q3PolyLine_GetVertexAttributeSet (
TQ3GeometryObject polyLine, 
unsigned long index, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3PolyLine_SetVertexAttributeSet (
TQ3GeometryObject polyLine, 
unsigned long index, 
TQ3AttributeSet attributeSet);
TQ3Status Q3PolyLine_GetSegmentAttributeSet (
TQ3GeometryObject polyLine, 
unsigned long index, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3PolyLine_SetSegmentAttributeSet (
TQ3GeometryObject polyLine, 
unsigned long index, 
TQ3AttributeSet attributeSet);

Creating and Editing Triangles

TQ3GeometryObject Q3Triangle_New (
const TQ3TriangleData *triangleData);
TQ3Status Q3Triangle_Submit (const TQ3TriangleData *triangleData, 
TQ3ViewObject view);
TQ3Status Q3Triangle_GetData (TQ3GeometryObject triangle, 
TQ3TriangleData *triangleData);
TQ3Status Q3Triangle_SetData (TQ3GeometryObject triangle, 
const TQ3TriangleData *triangleData);
TQ3Status Q3Triangle_EmptyData (TQ3TriangleData *triangleData);
TQ3Status Q3Triangle_GetVertexPosition (
TQ3GeometryObject triangle, 
unsigned long index, 
TQ3Point3D *point);
TQ3Status Q3Triangle_SetVertexPosition (
TQ3GeometryObject triangle, 
unsigned long index, 
const TQ3Point3D *point);
TQ3Status Q3Triangle_GetVertexAttributeSet (
TQ3GeometryObject triangle, 
unsigned long index, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Triangle_SetVertexAttributeSet (
TQ3GeometryObject triangle, 
unsigned long index, 
TQ3AttributeSet attributeSet);

Creating and Editing Simple Polygons

TQ3GeometryObject Q3Polygon_New (
const TQ3PolygonData *polygonData);
TQ3Status Q3Polygon_Submit (const TQ3PolygonData *polygonData, 
TQ3ViewObject view);
TQ3Status Q3Polygon_GetData (TQ3GeometryObject polygon, 
TQ3PolygonData *polygonData);
TQ3Status Q3Polygon_SetData (TQ3GeometryObject polygon, 
const TQ3PolygonData *polygonData);
TQ3Status Q3Polygon_EmptyData (TQ3PolygonData *polygonData);
TQ3Status Q3Polygon_GetVertexPosition (
TQ3GeometryObject polygon, 
unsigned long index, 
TQ3Point3D *point);
TQ3Status Q3Polygon_SetVertexPosition (
TQ3GeometryObject polygon, 
unsigned long index, 
const TQ3Point3D *point);
TQ3Status Q3Polygon_GetVertexAttributeSet (
TQ3GeometryObject polygon, 
unsigned long index, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Polygon_SetVertexAttributeSet (
TQ3GeometryObject polygon, 
unsigned long index, 
TQ3AttributeSet attributeSet);

Creating and Editing General Polygons

TQ3GeometryObject Q3GeneralPolygon_New (
const TQ3GeneralPolygonData *generalPolygonData);
TQ3Status Q3GeneralPolygon_Submit (
const TQ3GeneralPolygonData *generalPolygonData, 
TQ3ViewObject view);
TQ3Status Q3GeneralPolygon_GetData (
TQ3GeometryObject generalPolygon, 
TQ3GeneralPolygonData *generalPolygonData);
TQ3Status Q3GeneralPolygon_SetData (
TQ3GeometryObject generalPolygon, 
const TQ3GeneralPolygonData *generalPolygonData);
TQ3Status Q3GeneralPolygon_EmptyData (
TQ3GeneralPolygonData *generalPolygonData);
TQ3Status Q3GeneralPolygon_GetVertexPosition (
TQ3GeometryObject generalPolygon, 
unsigned long contourIndex, 
unsigned long pointIndex, 
TQ3Point3D *position);
TQ3Status Q3GeneralPolygon_SetVertexPosition (
TQ3GeometryObject generalPolygon, 
unsigned long contourIndex, 
unsigned long pointIndex, 
const TQ3Point3D *position);
TQ3Status Q3GeneralPolygon_GetVertexAttributeSet (
TQ3GeometryObject generalPolygon, 
unsigned long contourIndex, 
unsigned long pointIndex, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3GeneralPolygon_SetVertexAttributeSet (
TQ3GeometryObject generalPolygon, 
unsigned long contourIndex, 
unsigned long pointIndex, 
TQ3AttributeSet attributeSet);
TQ3Status Q3GeneralPolygon_GetShapeHint (
TQ3GeometryObject generalPolygon, 
TQ3GeneralPolygonShapeHint *shapeHint);
TQ3Status Q3GeneralPolygon_SetShapeHint (
TQ3GeometryObject generalPolygon, 
TQ3GeneralPolygonShapeHint shapeHint);

Creating and Editing Boxes

TQ3GeometryObject Q3Box_New (const TQ3BoxData *boxData);
TQ3Status Q3Box_Submit (const TQ3BoxData *boxData, 
TQ3ViewObject view);
TQ3Status Q3Box_GetData (TQ3GeometryObject box, 
TQ3BoxData *boxData);
TQ3Status Q3Box_SetData (TQ3GeometryObject box, 
const TQ3BoxData *boxData);
TQ3Status Q3Box_EmptyData (TQ3BoxData *boxData);
TQ3Status Q3Box_GetOrigin (TQ3GeometryObject box, TQ3Point3D *origin);
TQ3Status Q3Box_SetOrigin (TQ3GeometryObject box, 
const TQ3Point3D *origin);
TQ3Status Q3Box_GetOrientation (TQ3GeometryObject box, 
TQ3Vector3D *orientation);
TQ3Status Q3Box_SetOrientation (TQ3GeometryObject box, 
const TQ3Vector3D *orientation);
TQ3Status Q3Box_GetMajorAxis (TQ3GeometryObject box, 
TQ3Vector3D *majorAxis);
TQ3Status Q3Box_SetMajorAxis (TQ3GeometryObject box, 
const TQ3Vector3D *majorAxis);
TQ3Status Q3Box_GetMinorAxis (TQ3GeometryObject box, 
TQ3Vector3D *minorAxis);
TQ3Status Q3Box_SetMinorAxis (TQ3GeometryObject box, 
const TQ3Vector3D *minorAxis);
TQ3Status Q3Box_GetFaceAttributeSet (
TQ3GeometryObject box, 
unsigned long faceIndex, 
TQ3AttributeSet *faceAttributeSet);
TQ3Status Q3Box_SetFaceAttributeSet (
TQ3GeometryObject box, 
unsigned long faceIndex, 
TQ3AttributeSet faceAttributeSet);

Creating and Editing Trigrids

TQ3GeometryObject Q3TriGrid_New (
const TQ3TriGridData *triGridData);
TQ3Status Q3TriGrid_Submit (const TQ3TriGridData *triGridData, 
TQ3ViewObject view);
TQ3Status Q3TriGrid_GetData (TQ3GeometryObject triGrid, 
TQ3TriGridData *triGridData);
TQ3Status Q3TriGrid_SetData (TQ3GeometryObject triGrid, 
const TQ3TriGridData *triGridData);
TQ3Status Q3TriGrid_EmptyData (TQ3TriGridData *triGridData);
TQ3Status Q3TriGrid_GetVertexPosition (
TQ3GeometryObject triGrid, 
unsigned long rowIndex, 
unsigned long columnIndex, 
TQ3Point3D *position);
TQ3Status Q3TriGrid_SetVertexPosition (
TQ3GeometryObject triGrid, 
unsigned long rowIndex, 
unsigned long columnIndex, 
const TQ3Point3D *position);
TQ3Status Q3TriGrid_GetVertexAttributeSet (
TQ3GeometryObject triGrid, 
unsigned long rowIndex, 
unsigned long columnIndex, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3TriGrid_SetVertexAttributeSet (
TQ3GeometryObject triGrid, 
unsigned long rowIndex, 
unsigned long columnIndex, 
TQ3AttributeSet attributeSet);
TQ3Status Q3TriGrid_GetFacetAttributeSet (
TQ3GeometryObject triGrid, 
unsigned long faceIndex, 
TQ3AttributeSet *facetAttributeSet);
TQ3Status Q3TriGrid_SetFacetAttributeSet (
TQ3GeometryObject triGrid, 
unsigned long faceIndex, 
TQ3AttributeSet facetAttributeSet);

Creating and Editing Meshes

TQ3GeometryObject Q3Mesh_New (void);
TQ3MeshVertex Q3Mesh_VertexNew (TQ3GeometryObject mesh, 
const TQ3Vertex3D *vertex);
TQ3Status Q3Mesh_VertexDelete (TQ3GeometryObject mesh, TQ3MeshVertex vertex);
TQ3MeshFace Q3Mesh_FaceNew (TQ3GeometryObject mesh, 
unsigned long numVertices, 
const TQ3MeshVertex *vertices, 
TQ3AttributeSet attributeSet);
TQ3Status Q3Mesh_FaceDelete (TQ3GeometryObject mesh, TQ3MeshFace face);
TQ3Status Q3Mesh_DelayUpdates (TQ3GeometryObject mesh);
TQ3Status Q3Mesh_ResumeUpdates (TQ3GeometryObject mesh);
TQ3MeshContour Q3Mesh_FaceToContour (
TQ3GeometryObject mesh, 
TQ3MeshFace containerFace, 
TQ3MeshFace face);
TQ3MeshFace Q3Mesh_ContourToFace (
TQ3GeometryObject mesh, 
TQ3MeshContour contour);
TQ3Status Q3Mesh_GetNumComponents (
TQ3GeometryObject mesh, 
unsigned long *numComponents);
TQ3Status Q3Mesh_GetNumEdges (TQ3GeometryObject mesh, 
unsigned long *numEdges);
TQ3Status Q3Mesh_GetNumVertices (
TQ3GeometryObject mesh, 
unsigned long *numVertices);
TQ3Status Q3Mesh_GetNumFaces (TQ3GeometryObject mesh, 
unsigned long *numFaces);
TQ3Status Q3Mesh_GetNumCorners (TQ3GeometryObject mesh, 
unsigned long *numCorners);
TQ3Status Q3Mesh_GetOrientable (TQ3GeometryObject mesh, 
TQ3Boolean *orientable);
TQ3Status Q3Mesh_GetComponentNumVertices (
TQ3GeometryObject mesh, 
TQ3MeshComponent component, 
unsigned long *numVertices);
TQ3Status Q3Mesh_GetComponentNumEdges (
TQ3GeometryObject mesh, 
TQ3MeshComponent component, 
unsigned long *numEdges);
TQ3Status Q3Mesh_GetComponentBoundingBox (
TQ3GeometryObject mesh, 
TQ3MeshComponent component, 
TQ3BoundingBox *boundingBox);
TQ3Status Q3Mesh_GetComponentOrientable (
TQ3GeometryObject mesh, 
TQ3MeshComponent component, 
TQ3Boolean *orientable);
TQ3Status Q3Mesh_GetVertexCoordinates (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3Point3D *coordinates);
TQ3Status Q3Mesh_SetVertexCoordinates (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
const TQ3Point3D *coordinates);
TQ3Status Q3Mesh_GetVertexIndex (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
unsigned long *index);
TQ3Status Q3Mesh_GetVertexOnBoundary (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3Boolean *onBoundary);
TQ3Status Q3Mesh_GetVertexComponent (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3MeshComponent *component);
TQ3Status Q3Mesh_GetVertexAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Mesh_SetVertexAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3AttributeSet attributeSet);
TQ3Status Q3Mesh_GetFaceNumVertices (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
unsigned long *numVertices);
TQ3Status Q3Mesh_GetFacePlaneEquation (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
TQ3PlaneEquation *planeEquation);
TQ3Status Q3Mesh_GetFaceNumContours (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
unsigned long *numContours);
TQ3Status Q3Mesh_GetFaceIndex (TQ3GeometryObject mesh, 
TQ3MeshFace face, 
unsigned long *index);
TQ3Status Q3Mesh_GetFaceComponent (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
TQ3MeshComponent *component);
TQ3Status Q3Mesh_GetFaceAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Mesh_SetFaceAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshFace face, 
TQ3AttributeSet attributeSet);
TQ3Status Q3Mesh_GetEdgeVertices (
TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3MeshVertex *vertex1, 
TQ3MeshVertex *vertex2);
TQ3Status Q3Mesh_GetEdgeFaces (TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3MeshFace *face1, 
TQ3MeshFace *face2);
TQ3Status Q3Mesh_GetEdgeOnBoundary (
TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3Boolean *onBoundary);
TQ3Status Q3Mesh_GetEdgeComponent (
TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3MeshComponent *component);
TQ3Status Q3Mesh_GetEdgeAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Mesh_SetEdgeAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshEdge edge, 
TQ3AttributeSet attributeSet);
TQ3Status Q3Mesh_GetContourFace (
TQ3GeometryObject mesh, 
TQ3MeshContour contour, 
TQ3MeshFace *face);
TQ3Status Q3Mesh_GetContourNumVertices (
TQ3GeometryObject mesh, 
TQ3MeshContour contour, 
unsigned long *numVertices);
TQ3Status Q3Mesh_GetCornerAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3MeshFace face, 
TQ3AttributeSet *attributeSet);
TQ3Status Q3Mesh_SetCornerAttributeSet (
TQ3GeometryObject mesh, 
TQ3MeshVertex vertex, 
TQ3MeshFace face, 
TQ3AttributeSet attributeSet);

Traversing Mesh Components, Vertices, Faces, and Edges

TQ3MeshComponent Q3Mesh_FirstMeshComponent (
TQ3GeometryObject mesh, 
TQ3MeshIterator *iterator);
TQ3MeshComponent Q3Mesh_NextMeshComponent (
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_FirstComponentVertex (
TQ3MeshComponent component, 
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_NextComponentVertex (
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_FirstComponentEdge (
TQ3MeshComponent component, 
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_NextComponentEdge (
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_FirstMeshVertex (
TQ3GeometryObject mesh, 
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_NextMeshVertex (
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_FirstMeshFace (
TQ3GeometryObject mesh, 
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_NextMeshFace (
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_FirstMeshEdge (
TQ3GeometryObject mesh, 
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_NextMeshEdge (TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_FirstVertexEdge (
TQ3MeshVertex vertex, 
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_NextVertexEdge (
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_FirstVertexVertex (
TQ3MeshVertex vertex, 
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_NextVertexVertex (
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_FirstVertexFace (
TQ3MeshVertex vertex, 
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_NextVertexFace (
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_FirstFaceEdge (
TQ3MeshFace face, 
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_NextFaceEdge (
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_FirstFaceVertex (
TQ3MeshFace face, TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_NextFaceVertex (
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_FirstFaceFace (
TQ3MeshFace face, 
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_NextFaceFace (
TQ3MeshIterator *iterator);
TQ3MeshContour Q3Mesh_FirstFaceContour (
TQ3MeshFace face, TQ3MeshIterator *iterator);
TQ3MeshContour Q3Mesh_NextFaceContour (
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_FirstContourEdge (
TQ3MeshContour contour, 
TQ3MeshIterator *iterator);
TQ3MeshEdge Q3Mesh_NextContourEdge (
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_FirstContourVertex (
TQ3MeshContour contour, 
TQ3MeshIterator *iterator);
TQ3MeshVertex Q3Mesh_NextContourVertex (
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_FirstContourFace (
TQ3MeshContour contour, 
TQ3MeshIterator *iterator);
TQ3MeshFace Q3Mesh_NextContourFace (
TQ3MeshIterator *iterator);
#define Q3ForEachMeshComponent(m,c,i)                   \
 for ( (c) = Q3Mesh_FirstMeshComponent((m),(i));                  \
  (c);                 \
  (c) = Q3Mesh_NextMeshComponent((i)) )
#define Q3ForEachComponentVertex(c,v,i)                   \
 for ( (v) = Q3Mesh_FirstComponentVertex((c),(i));                  \
  (v);                 \
  (v) = Q3Mesh_NextComponentVertex((i)) )
#define Q3ForEachComponentEdge(c,e,i)                   \
 for ( (e) = Q3Mesh_FirstComponentEdge((c),(i));                  \
  (e);                 \
  (e) = Q3Mesh_NextComponentEdge((i)) )
#define Q3ForEachMeshVertex(m,v,i)                   \
 for ( (v) = Q3Mesh_FirstMeshVertex((m),(i));                  \
  (v);                 \
  (v) = Q3Mesh_NextMeshVertex((i)) )
#define Q3ForEachMeshFace(m,f,i)                   \
 for ( (f) = Q3Mesh_FirstMeshFace((m),(i));                  \
  (f);                 \
  (f) = Q3Mesh_NextMeshFace((i)) )
#define Q3ForEachMeshEdge(m,e,i)                   \
 for ( (e) = Q3Mesh_FirstMeshEdge((m),(i));                  \
  (e);                 \
  (e) = Q3Mesh_NextMeshEdge((i)) )
#define Q3ForEachVertexEdge(v,e,i)                   \
 for ( (e) = Q3Mesh_FirstVertexEdge((v),(i));                  \
  (e);                 \
  (e) = Q3Mesh_NextVertexEdge((i)) )
#define Q3ForEachVertexVertex(v,n,i)                   \
 for ( (n) = Q3Mesh_FirstVertexVertex((v),(i));                  \
  (n);                 \
  (n) = Q3Mesh_NextVertexVertex((i)) )
#define Q3ForEachVertexFace(v,f,i)                   \
 for ( (f) = Q3Mesh_FirstVertexFace((v),(i));                  \
  (f);                 \
  (f) = Q3Mesh_NextVertexFace((i)) )
#define Q3ForEachFaceEdge(f,e,i)                   \
 for ( (e) = Q3Mesh_FirstFaceEdge((f),(i));                  \
  (e);                 \
  (e) = Q3Mesh_NextFaceEdge((i)) )
#define Q3ForEachFaceVertex(f,v,i)                   \
 for ( (v) = Q3Mesh_FirstFaceVertex((f),(i));                  \
  (v);                 \
  (v) = Q3Mesh_NextFaceVertex((i)) )
#define Q3ForEachFaceFace(f,n,i)                   \
 for ( (n) = Q3Mesh_FirstFaceFace((f),(i));                   \
  (n);                 \
  (n) = Q3Mesh_NextFaceFace((i)) )
#define Q3ForEachFaceContour(f,h,i)                   \
 for ( (h) = Q3Mesh_FirstFaceContour((f),(i));                  \
  (h);                 \
  (h) = Q3Mesh_NextFaceContour((i)) )
#define Q3ForEachContourEdge(h,e,i)                   \
 for ( (e) = Q3Mesh_FirstContourEdge((h),(i));                  \
  (e);                 \
  (e) = Q3Mesh_NextContourEdge((i)) )
#define Q3ForEachContourVertex(h,v,i)                   \
 for ( (v) = Q3Mesh_FirstContourVertex((h),(i));                  \
  (v);                 \
  (v) = Q3Mesh_NextContourVertex((i)) )
#define Q3ForEachContourFace(h,f,i)                   \
 for ( (f) = Q3Mesh_FirstContourFace((h),(i));                  \
  (f);                 \
  (f) = Q3Mesh_NextContourFace((i)) )

Creating and Editing NURB Curves

TQ3GeometryObject Q3NURBCurve_New (
const TQ3NURBCurveData *curveData);
TQ3Status Q3NURBCurve_Submit (const TQ3NURBCurveData *curveData, 
TQ3ViewObject view);
TQ3Status Q3NURBCurve_GetData (TQ3GeometryObject curve, 
TQ3NURBCurveData *nurbCurveData); 
TQ3Status Q3NURBCurve_SetData (TQ3GeometryObject curve, 
const TQ3NURBCurveData *nurbCurveData);
TQ3Status Q3NURBCurve_EmptyData (
TQ3NURBCurveData *nurbCurveData);
TQ3Status Q3NURBCurve_GetControlPoint (
TQ3GeometryObject curve, 
unsigned long pointIndex, 
TQ3RationalPoint4D *point4D);
TQ3Status Q3NURBCurve_SetControlPoint (
TQ3GeometryObject curve, 
unsigned long pointIndex, 
const TQ3RationalPoint4D *point4D);
TQ3Status Q3NURBCurve_GetKnot (TQ3GeometryObject curve, 
unsigned long knotIndex, 
float *knotValue);
TQ3Status Q3NURBCurve_SetKnot (TQ3GeometryObject curve, 
unsigned long knotIndex, 
float knotValue);

Creating and Editing NURB Patches

TQ3GeometryObject Q3NURBPatch_New (
const TQ3NURBPatchData *nurbPatchData);
TQ3Status Q3NURBPatch_Submit (const TQ3NURBPatchData *nurbPatchData, 
TQ3ViewObject view);
TQ3Status Q3NURBPatch_GetData (TQ3GeometryObject nurbPatch, 
TQ3NURBPatchData *nurbPatchData);
TQ3Status Q3NURBPatch_SetData (TQ3GeometryObject nurbPatch, 
const TQ3NURBPatchData *nurbPatchData);
TQ3Status Q3NURBPatch_EmptyData (
TQ3NURBPatchData *nurbPatchData);
TQ3Status Q3NURBPatch_GetControlPoint (
TQ3GeometryObject nurbPatch, 
unsigned long rowIndex, 
unsigned long columnIndex, 
TQ3RationalPoint4D *point4D);
TQ3Status Q3NURBPatch_SetControlPoint (
TQ3GeometryObject nurbPatch, 
unsigned long rowIndex, 
unsigned long columnIndex, 
const TQ3RationalPoint4D *point4D);
TQ3Status Q3NURBPatch_GetUKnot (TQ3GeometryObject nurbPatch, 
unsigned long knotIndex, 
float *knotValue);
TQ3Status Q3NURBPatch_SetUKnot (TQ3GeometryObject nurbPatch, 
unsigned long knotIndex, 
float knotValue);
TQ3Status Q3NURBPatch_GetVKnot (TQ3GeometryObject nurbPatch, 
unsigned long knotIndex, 
float *knotValue);
TQ3Status Q3NURBPatch_SetVKnot (TQ3GeometryObject nurbPatch, 
unsigned long knotIndex, 
float knotValue);

Creating and Editing Markers

TQ3GeometryObject Q3Marker_New (const TQ3MarkerData *markerData);
TQ3Status Q3Marker_Submit (const TQ3MarkerData *markerData, 
TQ3ViewObject view);
TQ3Status Q3Marker_GetData (TQ3GeometryObject marker, 
TQ3MarkerData *markerData);
TQ3Status Q3Marker_SetData (TQ3GeometryObject marker, 
const TQ3MarkerData *markerData);
TQ3Status Q3Marker_EmptyData (TQ3MarkerData *markerData);
TQ3Status Q3Marker_GetPosition (TQ3GeometryObject marker, 
TQ3Point3D *location);
TQ3Status Q3Marker_SetPosition (TQ3GeometryObject marker, 
const TQ3Point3D *location);
TQ3Status Q3Marker_GetXOffset (TQ3GeometryObject marker, long *xOffset);
TQ3Status Q3Marker_SetXOffset (TQ3GeometryObject marker, long xOffset);
TQ3Status Q3Marker_GetYOffset (TQ3GeometryObject marker, long *yOffset);
TQ3Status Q3Marker_SetYOffset (TQ3GeometryObject marker, long yOffset);
TQ3Status Q3Marker_GetBitmap (TQ3GeometryObject marker, TQ3Bitmap *bitmap);
TQ3Status Q3Marker_SetBitmap (TQ3GeometryObject marker, 
const TQ3Bitmap *bitmap);

Managing Bitmaps

TQ3Status Q3Bitmap_Empty (TQ3Bitmap *bitmap);
unsigned long Q3Bitmap_GetImageSize (
unsigned long width, unsigned long height);

4 Errors, Warnings, and Notices
kQ3ErrorDegenerateGeometry 
kQ3ErrorGeometryInsufficientNumberOfPoints 
kQ3ErrorVector3DNotUnitLength 
kQ3WarningQuaternionEntriesAreZero 
kQ3NoticeMeshVertexHasNoComponent 
kQ3NoticeMeshInvalidVertexFacePair 
kQ3NoticeMeshEdgeVertexDoNotCorrespond 
kQ3NoticeMeshEdgeIsNotBoundary 

4 - C Summary
4 - Constants
4 - Data Types
Points
Rational Points
Polar and Spherical Points
Vectors
Quaternions
Rays
Parametric Points
Tangents
Vertices
Matrices
Bitmaps and Pixel Maps
Areas and Plane Equations
Point Objects
Lines
Polylines
Triangles
Simple Polygons
General Polygons
Boxes
Trigrids
Meshes
NURB Curves
NURB Patches
Markers
4 - Geometric Objects Routines
Managing Geometric Objects
Creating and Editing Points
Creating and Editing Lines
Creating and Editing Polylines
Creating and Editing Triangles
Creating and Editing Simple Polygons
Creating and Editing General Polygons
Creating and Editing Boxes
Creating and Editing Trigrids
Creating and Editing Meshes
Traversing Mesh Components, Vertices, Faces, and Edges
Creating and Editing NURB Curves
Creating and Editing NURB Patches
Creating and Editing Markers
Managing Bitmaps
4 - Errors, Warnings, and Notices

3D Graphics Programming with QuickDraw 3D - 21 OCT 1995

© Apple Computer, Inc.

Let us know what you think of these prototype pages.

Generated with Harlequin WebMaker