DIRECTORY
FunctionCache, Imager, IO, Rope, SV2d, SV3d, SVBasicTypes, SVModelTypes, SVRayTypes;

SVSceneTypes: CEDAR DEFINITIONS =
BEGIN
Artwork: TYPE = SVModelTypes.Artwork;
BoundHedron: TYPE = SVBasicTypes.BoundHedron;
Camera: TYPE = SVModelTypes.Camera;
Color: TYPE = Imager.Color;
CoordSystem: TYPE = SVModelTypes.CoordSystem;
CSGTree: TYPE = SVRayTypes.CSGTree;
FrameBox: TYPE = SVModelTypes.FrameBox;
LightSourceList: TYPE = SVModelTypes.LightSourceList;
Line3d: TYPE = SV3d.Line3d;
Matrix4by4: TYPE = SV3d.Matrix4by4;
Plane: TYPE = SV3d.Plane;
Point2d: TYPE = SV2d.Point2d;
Point3d: TYPE = SV3d.Point3d;
PointSetOp: TYPE = SVRayTypes.PointSetOp;
PolyDatabase: TYPE = SV3d.PolyDatabase;
Primitive: TYPE = SVRayTypes.Primitive;
Projection: TYPE = SVModelTypes.Projection;
Vector3d: TYPE = SV3d.Vector3d;

Database: TYPE = REF DatabaseObj;
DatabaseObj: TYPE = RECORD [
scenes: LIST OF Scene];

Skitter: TYPE = REF SkitterObj;
SkitterObj: TYPE = RECORD [
alive: BOOL,
cameraPoint: Point2d,
assembly: Slice,
primitive: Primitive,
skitterWORLD: Matrix4by4,
svData: REF ANY,
mode: SkitterMode];
SkitterMode: TYPE = {surface, tightrope, coordframe};
Scene: TYPE = REF SceneObj;
SceneObj: TYPE = RECORD [
name: Rope.ROPE,
coordSysRoot: CoordSystem, -- WORLD coordinates
lightSources: LightSourceList,
masterObjects: MasterObjectList,
assembly: Slice,
selected: SelectedData,
savedSelected: SelectedData,  -- for Abort and Extend Select
tree: CSGTree,
cameras: FileCameraList,
anchor: Skitter,
cameraOrder: LIST OF Rope.ROPE,
backgroundColor: Color,
shadows: BOOL,
dirty: BOOL];

SelectedData: TYPE = RECORD [
normal: LIST OF SliceDescriptor _ NIL,
hot: LIST OF SliceDescriptor _ NIL,
active: LIST OF SliceDescriptor _ NIL
];


SliceGenerator: TYPE = REF SliceGeneratorObj;
SliceGeneratorObj: TYPE = RECORD [
list: LIST OF Slice
];
SliceDescriptorGenerator: TYPE = REF SliceDescriptorGeneratorObj;
SliceDescriptorGeneratorObj: TYPE = RECORD [
list: LIST OF SliceDescriptor
];
SliceDescriptor: TYPE = REF SliceDescriptorObj;
SliceDescriptorObj: TYPE = RECORD [
slice: Slice,
parts: SliceParts
];
SliceParts: TYPE = REF ANY;

Slice: TYPE = REF SliceObj;
SliceObj: TYPE = RECORD [
name: Rope.ROPE,
coordSys: CoordSystem,
shape: REF ANY, -- a Shape or an assembly list
normalSelectedParts: SliceDescriptor,
hotSelectedParts: SliceDescriptor,
activeSelectedParts: SliceDescriptor,
bBoxCache: FunctionCache.Cache,
onOverlay: BOOL _ FALSE,
mark: BOOL _ FALSE, -- for sweeping thru scenes by Undelete mechanism
artwork: Artwork,
showAs: ShowAsType _ normal,
isTool: BOOL _ FALSE,
toolMasterObject: MasterObject _ NIL,
sittingOn: Rope.ROPE _ NIL -- the assembly whose surface it is sitting on.
];

ShowAsType: TYPE = {invisible, normal, tool, both};
Shape: TYPE = REF ShapeObj;
ShapeObj: TYPE = RECORD [
coordSys: CoordSystem,
mo: MasterObject];

ToolData: TYPE = REF ToolDataObj;
ToolDataObj: TYPE = RECORD [
block: FrameBlock,
infinite: BOOL,
plane: NAT,
clientData: REF ANY  -- currently used for Slice objects
];

FrameBlock: TYPE = REF FrameBlockObj;
FrameBlockObj: TYPE = RECORD [
loX, hiX, loY, hiY, loZ, hiZ: REAL];

SliceList: TYPE = REF SliceListObj;
SliceListObj: TYPE = RECORD [
	list: LIST OF Slice,
	pointSetOp: PointSetOp];

FileCamera: TYPE = REF FileCameraObj;
FileCameraObj: TYPE = RECORD [
name: Rope.ROPE,
origin: Point3d,
focusPoint: Point3d,
slant: REAL, -- the slant of the camera counter-clockwise from horizontal in degrees.
resolution: REAL,
focalLength: REAL,
projection: Projection,
frame: FrameBox,
clippingPlanes: LIST OF Plane,
visibleAssemblies: LIST OF Rope.ROPE];
FileCameraList: TYPE = LIST OF FileCamera;
SelectionClass: TYPE = {normal, hot, active};
MasterObject: TYPE = REF MasterObjectRec;
MasterObjectRec: TYPE = RECORD [
name: Rope.ROPE,
class: MasterObjectClass,
mainBody: REF ANY _ NIL,	-- information independent of imaging style
lineBody: REF ANY,
shadeBody: REF ANY,
rayCastBody: REF ANY
];
MasterObjectList: TYPE = LIST OF MasterObject;


PointAndDone: TYPE = RECORD [point: Point3d, done: BOOL];
PointGenerator: TYPE = REF PointGeneratorObj;
PointGeneratorObj: TYPE = RECORD [
sliceD: SliceDescriptor,
toGo: NAT,
index: NAT,
classSpecific: REF ANY
];

SelectMode: TYPE = {literal, joint, controlPoint, segment, segmentRange, traj, slice, topLevel, none};
ExtendMode: TYPE = SelectMode;
PlanarSurface: TYPE = REF PlanarSurfaceObj;
PlanarSurfaceObj: TYPE = RECORD [
whichSurface: REF ANY,
assembly: Slice,
mo: MasterObject,
normal: Vector3d,
depth: REAL];	-- in camera coords which the master object calculates (for now)

PlanarSurfaceList: TYPE = LIST OF PlanarSurface;
MasterObjectClass: TYPE = REF MasterObjectClassObj;
MasterObjectClassObj: TYPE = RECORD [
name: Rope.ROPE,
copy: CopyProc,
getHedron: GetHedronProc, -- a polyhedron the bounds the object
lineDraw: LineDrawProc,
lineDrawTransform: LineDrawTransformProc,
countSurf: CountSurfProc,
getSurf: GetSurfProc,
getSurfTransform: GetSurfTransformProc,
normalsDraw: NormalsDrawProc,
preprocess: PreprocessProc,
rayCast: RayCastProc,
rayCastNoBBoxes: RayCastNoBBoxesProc,
rayCastBoundingSpheres: RayCastBoundingSpheresProc,
drawSurf: DrawPlanarSurfaceProc,
drawSubBoxes: DrawSubBoxesProc,
drawSubSpheres: DrawSubSpheresProc,
transform: TransformProc,
describe: DescribeProc,
describeHit: DescribeHitProc,
filein: FileinProc,
fileout: FileoutProc,
fileoutPoly: FileoutPolyProc,
emptyParts: EmptyPartsProc,
newParts: NewPartsProc,
unionParts: UnionPartsProc,
differenceParts: DifferencePartsProc,
movingParts: MovingPartsProc,
augmentParts: AugmentPartsProc,
pointsInDescriptor: PointsInDescriptorProc,
nextPoint: NextPointProc,
closestPointToPoint: ClosestPointToPointProc,
closestPointToLine: ClosestPointToLineProc,
closestSegmentToPoint: ClosestSegmentToPointProc,
closestSegmentToLine: ClosestSegmentToLineProc,
update: UpdateProc -- change some aspect of the master object, such as how it draws itself
];
MasterObjectClassList: TYPE = LIST OF MasterObjectClass;

CopyProc: TYPE = PROC [mo: MasterObject, newName: Rope.ROPE] RETURNS [newMO: MasterObject];
GetHedronProc: TYPE = PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
DescribeProc: TYPE = PROC [sliceD: SliceDescriptor] RETURNS [rope: Rope.ROPE];
DescribeHitProc: TYPE = PROC [mo: MasterObject, hitData: REF ANY] RETURNS [rope: Rope.ROPE];
FileinProc: TYPE = PROC [f: IO.STREAM, name: Rope.ROPE, version: REAL] RETURNS [mo: MasterObject];
FileoutProc: TYPE = PROC [f: IO.STREAM, mo: MasterObject];
FileoutPolyProc: TYPE = PROC [f: IO.STREAM, mo: MasterObject];
RayCastProc: TYPE = SVRayTypes.RayCastProc;
RayCastNoBBoxesProc: TYPE = SVRayTypes.RayCastNoBBoxesProc;
RayCastBoundingSpheresProc: TYPE = SVRayTypes.RayCastBoundingSpheresProc;
PreprocessProc: TYPE = PROC [prim: Primitive, camera: Camera];
LineDrawProc: TYPE = PROC[slice: Slice, dc: Imager.Context, camera: Camera];
LineDrawTransformProc: TYPE = PROC[sliceD: SliceDescriptor, dc: Imager.Context, camera: Camera, transform: Matrix4by4];
CountSurfProc: TYPE = PROC [masterObject: MasterObject] RETURNS [len: NAT];
GetSurfProc: TYPE = PROC [slice: Slice, camera: CoordSystem] RETURNS [PlanarSurfaceList];
GetSurfTransformProc: TYPE = PROC [sliceD: SliceDescriptor, camera: CoordSystem, transform: Matrix4by4] RETURNS [PlanarSurfaceList];
NormalsDrawProc: TYPE = PROC[dc: Imager.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
EmptyPartsProc: TYPE = PROC [sliceD: SliceDescriptor] RETURNS [BOOL];
NewPartsProc: TYPE = PROC [slice: Slice, hitData: REF ANY, hitPoint: Point3d, mode: SelectMode] RETURNS [sliceD: SliceDescriptor];
UnionPartsProc: TYPE = PROC [partsA: SliceDescriptor, partsB: SliceDescriptor] RETURNS [aPlusB: SliceDescriptor];
DifferencePartsProc: TYPE = PROC [partsA: SliceDescriptor, partsB: SliceDescriptor] RETURNS [aMinusB: SliceDescriptor];
MovingPartsProc: TYPE = PROC [slice: Slice, selectedParts: SliceParts] RETURNS [background, overlay, rubber, drag: SliceDescriptor];
AugmentPartsProc: TYPE = PROC [sliceD: SliceDescriptor, selectClass: SelectionClass] RETURNS [more: SliceDescriptor];
ClosestPointToPointProc: TYPE = PROC [sliceD: SliceDescriptor, testPoint: Point3d, criticalR: REAL] RETURNS [bestDist: REAL, pointWORLD: Point3d, hitData: REF ANY, success: BOOL];
ClosestPointToLineProc: TYPE = PROC [sliceD: SliceDescriptor, cameraPoint: Point2d, line3d: Line3d, criticalR: REAL, camera: Camera] RETURNS [bestDist: REAL, pointWORLD: Point3d, hitData: REF ANY, success: BOOL];
ClosestSegmentToPointProc: TYPE = PROC [sliceD: SliceDescriptor, testPoint: Point3d, criticalR: REAL] RETURNS [bestDist: REAL, pointWORLD: Point3d, hitData: REF ANY, success: BOOL];
ClosestSegmentToLineProc: TYPE = PROC [sliceD: SliceDescriptor, cameraPoint: Point2d, line3d: Line3d, criticalR: REAL, camera: Camera] RETURNS [bestDist: REAL, pointWORLD: Point3d, hitData: REF ANY, success: BOOL];
PointsInDescriptorProc: TYPE = PROC [sliceD: SliceDescriptor] RETURNS [PointGenerator];
NextPointProc: TYPE = PROC [pointGen: PointGenerator] RETURNS [pointAndDone: PointAndDone];
DrawPlanarSurfaceProc: TYPE = PROC [dc: Imager.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
DrawSubBoxesProc: TYPE = PROC [dc: Imager.Context, prim: Primitive, screenCS: CoordSystem];
DrawSubSpheresProc: TYPE = PROC [dc: Imager.Context, prim: Primitive, camera: Camera];
TransformProc: TYPE = PROC [sliceD: SliceDescriptor, scene: Scene, transform: Matrix4by4];
UpdateProc: TYPE = PROC [mo: MasterObject, updateData: REF ANY];

END.
���L��File: SVSceneTypes.mesa
Created July 29, 1984 3:52:37 pm PDT
Copyright c 1984 by Xerox Corporation.  All rights reserved.
Last edited by Bier on May 26, 1987 4:54:35 pm PDT


The assembly mentioned above is known throughout the system as "sceneAssembly".  Translation, scaling and rotation of this assembly effects the entire scene.

Selection Bits
Bounding Boxes
Other Slice Data
Other Solidviews Data
Master Object Types
each object type will have its own way of describing its surfaces
The normal is a surface normal given in local coordinates by each assembly.  It is converted to camera coordinates before it is passed back to master object class code for drawing.

Master Object Class Types
Fundamentals
Drawing
Transforming
Textual Description
Parts
Part Generators
Hit Testing
closestFace: ClosestFaceProc, 
Miscellaneous
Drawing
Ê��˜�Ihead™J™$Jšœ
Ïmœ1™<Jšœ2™2J™�šÏk	˜	Jšœžœ;˜TJ˜�—Jšœžœ˜!Jšž˜J™�J–
"Cedar" stylešœ	žœ˜%J–
"Cedar" stylešœ
žœ˜-J–
"Cedar" stylešœžœ˜#J–
"Cedar" stylešœžœ˜J–
"Cedar" stylešœ
žœ˜-J–
"Cedar" stylešœ	žœ˜#J–
"Cedar" stylešœ
žœ˜'Jšœžœ ˜5Jšœžœ˜Jšœžœ˜#Jšœžœ˜Jšœ	žœ˜Jšœ	žœ˜Jšœžœ˜)Jšœžœ˜'Jšœžœ˜'Jšœžœ˜+Jšœ
žœ˜J–
"Cedar" style˜�J–
"Cedar" stylešœ
žœžœ
˜!šœ
žœžœ˜Jšœžœžœ˜—J˜�Jšœ	žœžœ˜šœžœžœ˜Jšœžœ˜Jšœ˜Iprocšœ˜Lšœ˜LšœÏuœ
˜Lšœžœžœ˜Lšœ˜—Lšœ
žœ$˜5J–
"Cedar" stylešœžœžœ
˜šœ
žœžœ˜Jšœžœ˜JšœÏc˜/Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Icodešœ ˜<J˜Jšœ˜J˜Jšœ
žœžœžœ˜Jšœ˜Jšœ	žœ˜Jšœžœ˜
—J˜�šœžœžœ˜Mšœžœžœžœ˜&Mšœžœžœžœ˜#Mšœžœžœž˜%M˜M˜�M˜�—J–
"Cedar" stylešœž™žMšœžœžœ˜-šœžœžœ˜"Mšœžœžœ˜M˜—Mšœžœžœ˜Ašœžœžœ˜,Mšœžœžœ˜M˜—Mšœžœžœ˜/šœžœžœ˜#M˜
M˜M˜—Mšœžœžœžœ˜M˜�J–
"Cedar" stylešœžœžœ
˜šœ
žœžœ˜Jšœžœ˜Jšœ˜Jšœžœžœ ˜.JšÏb™Jšœ%˜%Jšœ"˜"Jšœ%˜%Jš¡™J˜Jš¡™Jšœžœžœ˜Mšœžœžœ 1˜EMš¡™Jšœ˜Jšœ˜Jšœžœžœ˜Jšœ!žœ˜%Jšœžœžœ /˜JJšœ˜J˜�—Jšœžœ#˜3Jšœžœžœ
˜šœ
žœžœ˜J˜J˜J˜�—Jšœ
žœžœ
˜!šœ
žœžœ˜Jšœ˜Jšœ
žœ˜Jšœžœ˜Jšœžœžœ #˜8J˜J˜�—Jšœžœžœ˜%šœžœžœ˜Jšœžœ˜$—J˜�J–
"Cedar" stylešœžœžœ˜#Jš	œžœžœ
žœžœ!˜MJ˜�Jšœžœžœ˜%šœžœžœ˜Jšœžœ˜Jšœ˜Jšœ˜Jšœžœ H˜ULšœžœ˜Lšœ
žœ˜L˜Lšœ˜Lšœžœžœ˜Lšœžœžœžœ˜&—Jšœžœžœžœ˜*Mšœžœ˜-head2–
"Cedar" stylešœ™J–
"Cedar" stylešœžœžœ˜)šœžœžœ˜ Jš¡œžœ˜Jš¡œ˜Jš	¡œžœžœžœ +˜DJš¡œžœžœ˜Jš¡	œžœžœ˜Jš¡œžœž˜Jšœ˜—Jšœžœžœžœ˜/J–
"Cedar" style˜�Mšœžœžœžœ˜9šœžœžœ˜-šœžœžœ˜"Mšœ˜Mšœžœ˜
Mšœžœ˜Mšœžœž˜M˜M˜�——MšœžœV˜fMšœžœ˜J–
"Cedar" stylešœžœžœ˜+šœžœžœ˜!Jšœžœžœ˜JšœA™AJšœ˜Jšœ˜Jšœ˜Jšœžœ @˜NJ˜�—J–
"Cedar" stylešœµ™µJ–
"Cedar" stylešœžœžœžœ˜0—–
"Cedar" stylešœ™J–
"Cedar" stylešœžœžœ˜3šœžœžœ˜%Jš¡œžœ˜Mš¡™Mš¡œ˜Jš¡	œ %˜?Mšœ™Jš¡œ˜Jš¡œ˜)Jš¡	œ˜Jš¡œ˜Jš¡œ˜'Jš¡œ˜Jš¡
œ˜Jš¡œ˜Jš¡œ˜%Jš¡œ˜3Jš¡œ˜ Jš¡œ˜Jš¡œ˜#Jšœ™Jš¡	œ˜Mšœ™Mš¡œ˜Mš¡œ˜Jš¡œ
˜Jš¡œ˜Jš¡œ˜Jšœ™Mš¡
œ˜Jš¡œ˜Mš¡
œ˜Mš¡œ˜%Mš¡œ˜Mš¡œ˜Mšœ™Mš¡œ˜+Mš¡	œ˜Mšœ™Mš¡œ˜-Mš¡œ˜+Mš¡œ˜1Mš¡œ˜/Mš¡œ™Jšœ
™
Jš¡œ
 G˜ZJšœ˜—Jšœžœžœžœ˜8J˜�Jš
Ïnœžœžœ"žœžœ˜[Jš¢
œžœžœžœ˜LMš
¡œžœžœžœ
žœ˜NMš¡œžœžœžœžœžœ
žœ˜\J–
"Cedar" stylešœžœžœžœžœ
žœžœžœ˜bJ–
"Cedar" styleš
¢œžœžœžœžœ˜:J–
"Cedar" styleš¢Ðbnœžœžœžœžœ˜>J–
"Cedar" styleš¡œžœ˜+J–
"Cedar" styleš¡œžœ"˜;J–
"Cedar" styleš¡œžœ)˜IJš¢œžœžœ#˜>Mšœ™J–
"Cedar" styleš¢œžœžœ3˜LJ–
"Cedar" styleš¢œžœžœU˜wJ–
"Cedar" styleš
¢
œžœžœžœžœ˜KJ–
"Cedar" styleš¢œžœžœ%žœ˜YJ–
"Cedar" styleš¢œžœžœGžœ˜„J–
"Cedar" styleš
¢œžœžœžœžœ(˜fMš
¡œžœžœžœžœ˜EMš¢œžœžœžœžœ'žœ˜‚Mš¡œžœžœ4žœ˜qMš¡œžœžœ4žœ˜wMš¢œžœžœ+žœ6˜„Mš¡œžœžœ8žœ˜uMš¡œžœžœ:žœžœžœŸœžœžœžœ˜³Mš¡œžœžœLžœžœžœŸœžœžœžœ˜ÔMš¢œžœžœ:žœžœžœŸœžœžœžœ˜µMš¢œžœžœLžœžœžœŸœžœžœžœ˜ÖJ–
"Cedar" styleš¢œžœžœžœ˜WJ–
"Cedar" styleš¢
œžœžœžœ˜[J–
"Cedar" styleš¢œžœžœX˜zJ–
"Cedar" styleš¢œžœžœ>˜[J–
"Cedar" styleš¢œžœžœ7˜VJ–
"Cedar" styleš¢
œžœžœ@˜ZJ–
"Cedar" styleš
¢
œžœžœ žœžœ˜@—J–
"Cedar" style˜�J–
"Cedar" stylešžœ˜—�…—����%
��7o��