/* A more complete HoverWare prototype in OADL */
using namespace oadl;
/******************************************************************************
* Useful constants
******************************************************************************/
const
True = 1, False = 0;
/******************************************************************************
* Attributes
******************************************************************************/
class hwSurface {
public var
Color = {1.0, 1.0, 1.0},
Transparency = 0.0,
SpecColor = {1.0, 1.0, 1.0},
Shininess = 0.1,
Backface = False,
TwoSided = False,
Bright = False,
Invisible = False,
Wireframe = False,
Visibility = 0xFFFFFFFF,
Texture = nil,
Uncolored = False;
}
class hwOrient {
public var
Scale = {1.0, 1.0, 1.0},
Rotate = {0.0, 0.0, 0.0},
Pos = {0.0, 0.0, 0.0};
/*public proc
matrix()
{
}
*/
}
class hwImage {
public var
Rows = 0,
Columns = 0,
Components = 0,
Image = nil,
FileName = nil;
}
const
HW_TM_MODULATE = 1,
HW_TM_REPLACE = 2,
HW_TM_DECAL = 3,
HW_TM_REPEAT = 1,
HW_TM_CLAMP = 2,
HW_TM_EXPLICIT = 1,
HW_TM_PLANAR = 1,
HW_TM_SPHERE = 3,
HW_TM_CYLINDER = 4;
class hwTexture(hwImage,hwOrient) {
public var
Apply = HW_TM_MODULATE,
Bound = HW_TM_REPEAT,
CoordMode = HW_TM_EXPLICIT,
Filter = True,
SampVert = False;
}
/******************************************************************************
* Primitive drawable classes
******************************************************************************/
const
HW_OPT_NONE = 0,
HW_OPT_SAVE_DATA = 1,
HW_OPT_USE_DL = 2,
HW_OPT_FREE_USER_DATA = 3;
class hwDrawable(hwSurface,hwOrient) {
public var
OptLevel = HW_OPT_NONE;
public proc
draw() {}
public proc
bounds() {}
}
class hwBox(hwDrawable) {
public var
Data = nil,
OptLevel = HW_OPT_NONE;
var
dirty,
data;
operator {} ()
{
dirty = 1;
}
}
class hwMesh(hwDrawable) {
public var
GraphN = 0,
GraphM = 0,
HasNormals = False,
HasRGB = False,
HasUV = False,
Data = nil;
}
class hwPolygon(hwDrawable) {
public var
HasNormals = False,
HasRGB = False,
HasUV = False,
Data = nil;
}
class hwQuads(hwDrawable) {
public var
HasNormals = False,
HasRGB = False,
HasUV = False,
Data = nil;
}
class hwPolyline(hwOrient) {
public var
Invisible = False,
Visibility = 0xFFFFFFFF,
Color = {1,1,1},
OptLevel = HW_OPT_NONE,
Data = nil;
}
class hwPolymarker(hwOrient) {
public var
Invisible = False,
Visibility = 0xFFFFFFFF,
Color = {1,1,1},
OptLevel = HW_OPT_NONE,
Data = nil;
}
class hwTriangles(hwDrawable) {
public var
HasNormals = False,
HasRGB = False,
HasUV = False,
Data = nil;
}
class hwGroup(hwOrient) {
public var
Invisible = False,
Visibility = 0xFFFFFFFF,
Children = nil;
var
bboxValid = False,
bbox;
public proc
bounds()
{
if( !bboxValid ) {
var
tmpBox, i, n;
n = Children.length();
for( i = 0; i < n; i += 1 ) {
tmpBox = Children[i].bounds();
if( tmpBox == nil ) return nil;
}
bboxValid = True;
}
}
public proc
draw()
{
var
i, n;
if( !bboxValid ) {
bounds();
}
if( Invisible ) return;
n = Children.length();
for( i = 0; i < n; i += 1 ) {
Children[i].draw();
}
}
}
const
HW_TEXT_ALIGN_LEFT = 0,
HW_TEXT_ALIGN_CENTER = 1,
HW_TEXT_ALIGN_RIGHT = 2,
HW_TEXT_ALIGN_TOP = 0,
HW_TEXT_ALIGN_BOTTOM = 2,
HW_TEXT_ALIGN_FRONT = 0,
HW_TEXT_ALIGN_BACK = 2;
class hwText {
public var
Data = nil,
Surface = {hwSurface{}, hwSurface{}, hwSurface{}},
Pos = {0,0,0},
Dir = {1,0,0},
Up = {0,1,0},
Scale = 1.0,
Extrude = {0,0,0.25},
Align = {HW_TEXT_ALIGN_CENTER, HW_TEXT_ALIGN_CENTER,
HW_TEXT_ALIGN_CENTER};
}
/******************************************************************************
* Derived drawable classes
******************************************************************************/
class hwCone(hwMesh) {
public var
GraphN = 9,
GraphM = 17,
Radius = {1,1},
Height = 1.0,
LonRange = {0,360},
HasNormals = True;
}
class hwDisc(hwPolygon) {
public var
GraphN = 17,
Radius = 1.0;
}
class hwRing(hwMesh) {
public var
GraphN = 9,
GraphM = 17,
Radius = {0.5,1.0},
LonRange = {0,360};
}
class hwSphere(hwMesh) {
public var
GraphN = 9,
GraphM = 17,
Radius = 1.0,
LatRange = {-90,90},
LonRange = {0,360},
HasNormals = True;
}
class hwSurfRev(hwMesh) {
public var
LonRange = {0,360},
HasNormals = True;
}
class hwTorus(hwMesh) {
public var
GraphN = 17,
GraphM = 17,
Radius = {0.5,1.0},
LatRange = {0,360},
LonRange = {0,360},
HasNormals = True;
}
/******************************************************************************
* Lights/camera/environ/etc
******************************************************************************/
class hwCamera {
public var
Pos = {0,0,-1.4},
Dir = {0,0,1},
Up = {0,1,0},
Field = 90,
Aspect = 1.0,
Planes = {0.4, 2.4},
Perspective = False;
}
class hwEnviron {
public var
BackgroundColor = {0,0,0},
AmbientFactor = 0.5,
AmbientColor = {1,1,1},
Fog = False,
FogColor = {0,0,0},
Lighting = True;
}
class hwFile {
public var
FileName = nil;
}
class hwLight {
public var
Color = {1,1,1},
Positional = False,
Pos = {0,0,-1},
Dir = {0,0,1},
Cutoff = 0.0,
LightExp = 0.0,
Atten = 0.0;
}
/******************************************************************************
* Action!
******************************************************************************/
class hwSpinner {
public var
Children = nil,
Invisible = False,
Visibility = 0xFFFFFFFF,
PosType = nil,
DirType = nil,
UpType = nil,
ScaleType = nil,
PosParams = nil,
DirParams = nil,
UpParams = nil,
ScaleParams = nil,
PosTimes = nil,
DirTimes = nil,
UpTimes = nil,
ScaleTimes = nil,
Lifetime = {0,1e38},
CycleType = 0.0,
Offset = 0.0,
Delay = 0.0;
}
class hwTimer {
public var
Lifetime = {0,1e38},
Equation = {0,1},
CycleTime = 0.0,
Children = nil;
}