-- File: CSGGraphics.mesa -- Last edited by Bier on December 18, 1982 1:13 am -- Author: Eric Allan Bier on July 2, 1983 4:07 pm -- Contents: A place to keep the current 3d transform, and the 3d (perspective) drawing routines DIRECTORY CoordSys, Graphics, GraphicsColor, Matrix3d, Shading, SVArtwork, SVPolygon3d, SVVector3d; CSGGraphics: DEFINITIONS = BEGIN Artwork: TYPE = REF ArtworkObj; ArtworkObj: TYPE = SVArtwork.ArtworkObj; Camera: TYPE = REF CameraObj; Color: TYPE = GraphicsColor.Color; CoordSystem: TYPE = REF CoordSysObj; CoordSysObj: TYPE = CoordSys.CoordSysObj; DrawStyle: TYPE = {wire, shaded, rayCast, normals}; Matrix4by4: TYPE = Matrix3d.Matrix4by4; Point3d: TYPE = Matrix3d.Point3d; Point2d: TYPE = Matrix3d.Point2d; Poly3d: TYPE = REF Poly3dObj; Poly3dObj: TYPE = SVPolygon3d.Poly3dObj; LightSource: TYPE = REF LightSourceObj; LightSourceObj: TYPE = Shading.LightSourceObj; LightSourceList: TYPE = Shading.LightSourceList; -- LIST OF LightSource; StrokeEnds: TYPE = Graphics.StrokeEnds; Vector: TYPE = SVVector3d.Vector; CameraObj: TYPE = RECORD [ coordSys: CoordSystem, screenCS: CoordSystem, focalLength: REAL, style: DrawStyle, colorFilm: BOOL, resolution: REAL, frame: FrameBox, quality: QualityMode, abort: BOOL _ FALSE]; QualityMode: TYPE = {fast, quality}; FrameBox: TYPE = REF FrameBoxObj; FrameBoxObj: TYPE = RECORD [ downLeft: Point2d, upRight: Point2d, fullScreen: BOOL]; -- these points are in CAMERA coordinates CreateCamera: PROC [coordSys: CoordSystem, screenCS: CoordSystem, focalLength: REAL, style: DrawStyle, resolution: REAL] RETURNS [camera: Camera]; PlaceCamera: PROC [camera: Camera, focus: Point3d, origin: Point3d]; SetFocalLengthCamera: PROC [camera: Camera, focalLength: REAL]; SetQualityCamera: PROC [camera: Camera, qual: QualityMode]; -- how you wish to make the speed/print quality trade off. ColorFilmCamera: PROC [camera: Camera, colorFilm: BOOL]; -- if black and white film is used, all colors will be changed to shades of gray before being shown Clip: PROC [dc: Graphics.Context, camera: Camera]; DrawFrame: PROC [dc: Graphics.Context, camera: Camera]; GetPerspective: PROC [point3d: Point3d, camera: Camera] RETURNS [point2d: Point2d]; LocalToCamera: PROC [localPoint: Point3d, localCS: CoordSystem] RETURNS [cameraPoint: Point3d]; LocalToWorld: PROC [localPt: Point3d, localCS: CoordSystem] RETURNS [worldPt: Point3d]; VectorToWorld: PROC [vector: Vector, localCS: CoordSystem] RETURNS [worldVector: Vector]; SetCP: PROC [dc: Graphics.Context, point3d: Point3d, camera: Camera, localCS: CoordSystem]; MoveTo: PROC [path: Graphics.Path, point3d: Point3d, camera: Camera, localCS: CoordSystem]; SetCPAbsolute: PROC [dc: Graphics.Context, point3d: Point3d, camera: Camera]; MoveToAbsolute: PROC [path: Graphics.Path, point3d: Point3d, camera: Camera]; LineTo: PROC [path: Graphics.Path, point3d: Point3d, camera: Camera, localCS: CoordSystem]; DrawTo: PROC [dc: Graphics.Context, point3d: Point3d, camera: Camera, localCS: CoordSystem]; LineToAbsolute: PROC [path: Graphics.Path, point3d: Point3d, camera: Camera]; DrawToAbsolute: PROC [dc: Graphics.Context, point3d: Point3d, camera: Camera]; DrawStroke: PROC [dc: Graphics.Context, path: Graphics.Path, width: REAL _ 1, closed: BOOLEAN _ FALSE, ends: StrokeEnds _ butt]; DrawLine: PROC [dc: Graphics.Context, start: Point3d, end: Point3d, camera: Camera, localCS: CoordSystem]; DrawArea: PROC [dc: Graphics.Context, normal: Vector, poly3d: Poly3d, artwork: Artwork, lightSources: LightSourceList, camera: Camera, localCS: CoordSystem]; -- normal and poly3d in local coordinates. DrawAreaNormalAbsolute: PROC [dc: Graphics.Context, normal: Vector, poly3d: Poly3d, artwork: Artwork, lightSources: LightSourceList, camera: Camera, localCS: CoordSystem]; -- normal is assumed to be in Camera coordinates. poly3d in local coordinates. DrawAreaAbsolute: PROC [dc: Graphics.Context, poly3d: Poly3d, camera: Camera]; -- area is drawn a solid color so normal information is not needed. poly3d in Camera coordinates. END. ÊÞ– "Mesa" style˜IprocšÒÏcâœÏk œrž œžœ žœžœžœ!žœžœžœ%žœžœžœ$žœ1žœ!žœžœžœžœžœ'žœžœ!žœ,žœœ žœ žœ"žœžœAžœ!žœžœ3žœžœžœžœžœžœžœ7žœ*œÏn œžœ=žœ žœžœŸ œžœ4ŸœžœžœŸœžœ';ŸœžœžœdŸœžœ)Ÿ œžœ)Ÿœžœ$žœŸ œžœ-žœŸ œžœ*žœŸ œžœ(žœŸœžœQŸœžœPŸ œžœ;Ÿœžœ:ŸœžœPŸœžœQŸœžœ:Ÿœžœ;Ÿ œžœ4žœžœžœŸœžœ^Ÿœžœ’,Ÿœžœ’PŸœžœ:cœžœ˜Þ—…—àÄ