home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1992 The Geometry Center; University of Minnesota
- 1300 South Second Street; Minneapolis, MN 55454, USA;
-
- This file is part of geomview/OOGL. geomview/OOGL is free software;
- you can redistribute it and/or modify it only under the terms given in
- the file COPYING, which you should have received along with this file.
- This and other related software may be obtained via anonymous ftp from
- geom.umn.edu; email: software@geom.umn.edu. */
-
- /* Authors: Charlie Gunn, Pat Hanrahan, Stuart Levy, Tamara Munzner, Mark Phillips */
-
- #ifndef TRANSFORM3DEF
- #define TRANSFORM3DEF
-
- #include "point3.h"
- #include "hpoint3.h"
- #include "hplane3.h"
-
- typedef float Tm3Coord;
- typedef Tm3Coord Transform3[4][4];
-
- /*
- * Space & model flags; used to specify what space we're in, and
- * a model for hyperbolic space. The actual value may be a logical
- * OR of a space and a model value.
- */
- #define TM_HYPERBOLIC 0x0001
- #define TM_EUCLIDEAN 0x0002
- #define TM_SPHERICAL 0x0004
-
- #define TM_SPACE(x) (x & 0x00ff)
- #define TM_MODEL(x) (x & 0xff00)
-
- #define TM_VIRTUAL 0x0100
- #define TM_PROJECTIVE 0x0200
- #define TM_CONFORMAL_BALL 0x0400
-
- #define TMNULL ((TmCoord (*)[4])0) /* How to pass a NULL Transform ptr */
-
- #ifndef X
- #define X 0
- #define Y 1
- #define Z 2
- #define W 3
- #endif
-
-
- extern void Tm3Adjoint(/* Transform3, Transform3 */);
- extern float Tm3Invert(/* Transform3 T, Transform3 Tinv */);
- extern float Tm3Determinant(/* Transform3 T */);
- extern void Tm3Dual(/* Transform3 T, Transform3 Tdual */);
- extern void Tm3Transpose(/* Transform3 Ta, Transform3 Tb */);
- extern void Tm3PostConcat(/* Transform3 Ta, Transform3 Tb */);
- extern void Tm3PreConcat(/* Transform3 Ta, Transform3 Tb */);
- extern void Tm3Concat(/* Transform3 Ta, Transform3 Tb, Transform3 Tc */);
-
- extern void Tm3Print(/* Transform3 T */);
- extern void Tm3Copy(/* Transform3 Tsrc, Transform3 Tdst */);
- extern int Tm3Compare( /* Transform T1, Transform T2, float tol */);
- extern void Tm3Push(/* Transform3 T */);
- extern void Tm3Pop(/* Transform3 T */);
-
- extern void Tm3Conjugate(/* Transform3 T, Transform3 Tcon, Transform3 Tres */);
-
- extern void Tm3Identity(/* Transform3 T */);
-
- extern void Tm3Translate(/* Transform T, TmCoord tx, TmCoord ty, TmCoord tz */);
- extern void Tm3TranslateOrigin(/* Transform T, HPoint *pt */);
-
- extern void Tm3HypTranslate(/* Transform T, TmCoord tx, TmCoord ty, TmCoord tz */);
- extern void Tm3HypTranslateOrigin(/* Transform T, HPoint3 Ppt */);
-
- extern void Tm3SphTranslate(/* Transform T, TmCoord tx, TmCoord ty, TmCoord tz */);
- extern void Tm3SphTranslateOrigin(/* Transform T, HPoint3 *pt */);
- extern void Tm3SpaceTranslate(/* Transform T,
- TmCoord tx, TmCoord ty, TmCoord tz, int space */);
- extern void Tm3SpaceTranslateOrigin(/* Transform T, HPoint3 *pt, int space */);
-
- extern void Tm3RotateX(/* Transform3 T, float angle */);
- extern void Tm3RotateY(/* Transform3 T, float angle */);
- extern void Tm3RotateZ(/* Transform3 T, float angle */);
- extern void Tm3Rotate(/* Transform3 T, float angle, Point *axis */);
- extern void Tm3CarefulRotateTowardZ(/* Transform3 T, HPoint3 *pos */);
- extern void Tm3RotateTowardZ(/* Transform3 T, HPoint3 *pos */);
- extern void Tm3AlignX(/* Transform3 T, Point *axis */);
- extern void Tm3AlignY(/* Transform3 T, Point *axis */);
- extern void Tm3AlignZ(/* Transform3 T, Point *axis */);
- extern void Tm3Align(/* Transform3 T, Point *axis, Point *newaxis */);
- extern void Tm3Scale(/* Transform3 T, float sx, float sy, float sz */);
- extern void Tm3Skew(/*Transform3 T, float angle, Point *axis1, Point *axis2*/);
- extern void Tm3Shear(/* Transform3 T, Point *pt, Plane *pl */);
- extern void Tm3Reflect(/* Transform3 T, Plane *pl */);
- extern int Tm3Refract(/* Transform3 T, Plane *pl, float eta */);
- extern int Tm3Refract2(/* Transform3 T, Plane *pl, float eta */);
- extern void Tm3Project(/* Transform3 T, Plane *pl, Point *pt */);
-
- extern void Tm3Orthographic(/* Transform3 T,
- float l, float r, float b, float t, float n, float f */);
- extern void Tm3Perspective(/* Transform T,
- float l, float r, float b, float t, float n, float f */);
- extern void Tm3Window(/* Transform3 T, float l, float r, float b, float t */);
-
- extern void Ctm3Translate(/* Transform3 T, float tx, float ty, float tz */);
- extern void Ctm3RotateX(/* Transform3 T, float angle */);
- extern void Ctm3RotateY(/* Transform3 T, float angle */);
- extern void Ctm3RotateZ(/* Transform3 T, float angle */);
- extern void Ctm3Rotate(/* Transform3 T, float angle, Point *axis */);
- extern void Ctm3AlignX(/* Transform3 T, Point *axis */);
- extern void Ctm3AlignY(/* Transform3 T, Point *axis */);
- extern void Ctm3AlignZ(/* Transform3 T, Point *axis */);
- extern void Ctm3Align(/* Transform3 T, Point *axis, Point *newaxis */);
- extern void Ctm3Scale(/* Transform3 T, float sx, float sy, float sz */);
- extern void Ctm3Skew(/*Transform3 T, float angle, Point *axis1, Point *axis2*/);
- extern void Ctm3Shear(/* Transform3 T, Point *pt, Plane *pl */);
- extern void Ctm3Reflect(/* Transform3 T, Plane *pl */);
- extern int Ctm3Refract(/* Transform3 T, Plane *pl, float eta */);
- extern int Ctm3Refract2(/* Transform3 T, Plane *pl, float eta */);
- extern void Ctm3Project(/* Transform3 T, Plane *pl, Point *pt */);
-
- extern void Ctm3Orthographic(/* Transform3 T,
- float l, float r, float b, float t, float n, float f */);
- extern void Ctm3Perspective(/* Transform T,
- float l, float r, float b, float t, float n, float f */);
- extern void Ctm3Window(/* Transform3 T, float l, float r, float b, float t */);
-
- extern HPoint3 TM3_XAXIS;
- extern HPoint3 TM3_YAXIS;
- extern HPoint3 TM3_ZAXIS;
- extern Transform3 TM3_IDENTITY;
- # endif
-