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��