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. LFile: 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– "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