<> <> <> <> <> DIRECTORY AIS, Containers, FS, Graphics, GraphicsColor, IO, Matrix3d, Menus, ReadAIS, Real, Rope, SV2d, SV3d, SVArtwork, SVArtworkUser, SVCoordSys2d, SVDraw, SVError, SVFiles, SVInterfaceTypes, SVMappings, SVModelTypes, SVRayTypes, SVSceneTypes, SVMatrix2d, SVSelections, SVViewerTools, ViewerClasses, ViewerTools, ViewerOps; SVArtworkUserImpl: CEDAR PROGRAM IMPORTS AIS, FS, GraphicsColor, IO, Matrix3d, ReadAIS, Real, Rope, SVArtwork, SVCoordSys2d, SVDraw, SVError, SVFiles, SVMappings, SVMatrix2d, SVSelections, SVViewerTools, ViewerOps, ViewerTools EXPORTS SVArtworkUser = BEGIN Artwork: TYPE = SVModelTypes.Artwork; Assembly: TYPE = SVSceneTypes.Assembly; AssemblyList: TYPE = SVSceneTypes.AssemblyList; Box: TYPE = SVModelTypes.Box; EditToolData: TYPE = SVInterfaceTypes.EditToolData; Matrix4by4: TYPE = SV3d.Matrix4by4; MouseButton: TYPE = Menus.MouseButton; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = SV3d.Point3d; Primitive: TYPE = SVRayTypes.Primitive; Shape: TYPE = SVSceneTypes.Shape; Tube: TYPE = SVModelTypes.Tube; Vector: TYPE = SV3d.Vector; Viewer: TYPE = ViewerClasses.Viewer; ViewerToolData: TYPE = SVInterfaceTypes.ViewerToolData; ArtworkToolData: TYPE = SVInterfaceTypes.ArtworkToolData; UpdateHeader: PUBLIC PROC [assemblyName: Rope.ROPE, sceneName: Rope.ROPE, artworkToolData: ArtworkToolData] = { headerRope: Rope.ROPE; headerStream: IO.STREAM; headerStream _ IO.ROS[]; IF artworkToolData.artwork.source = NIL THEN { -- pure color artwork r,g,b: REAL; [r,g,b] _ GraphicsColor.ColorToRGB[artworkToolData.artwork.color]; headerStream.PutF["Artwork: (pure color) [%g, %g, %g]", [real[r]], [real[g]], [real[b]]]; } ELSE { r,g,b: REAL; [r,g,b] _ GraphicsColor.ColorToRGB[artworkToolData.artwork.color]; headerStream.PutF["Artwork: %g %g backColor: [%g, %g, %g]", [rope[sceneName]], [rope[assemblyName]], [real[r]], [real[g]], [real[b]]]; }; headerRope _ IO.RopeFromROS[headerStream]; artworkToolData.outer.name _ headerRope; ViewerOps.PaintViewer[artworkToolData.outer, caption, FALSE, NIL]; }; Painter: PUBLIC PROC [proc: PROC [dc: Graphics.Context], artworkToolData: ArtworkToolData] = TRUSTED { artworkToolData.proc _ proc; ViewerOps.PaintViewer[viewer: artworkToolData.picture, hint: client, whatChanged: artworkToolData, clearClient: FALSE]; }; -- end of Painter <> SetArtwork: PUBLIC PROC [artworkTool: Viewer, artwork: Artwork, sceneName: Rope.ROPE, assemblyName: Rope.ROPE] = { artworkToolData: ArtworkToolData _ NARROW[artworkTool.data]; artworkToolData.artwork _ artwork; UpdateHeader[assemblyName, sceneName, artworkToolData]; DrawArtwork[NIL, artworkToolData, red, FALSE, FALSE]; }; RotateArtwork: PUBLIC PROC [artworkTool: Viewer, degrees: REAL] = TRUSTED { artworkToolData: ArtworkToolData _ NARROW[artworkTool.data]; artwork: Artwork _ artworkToolData.artwork; SVCoordSys2d.RotateCCWAwrtB[artwork.artWRTPad, artwork.artWRTPad, degrees]; DrawArtwork[NIL, artworkToolData, red, FALSE, FALSE]; }; NormalizeArtwork: PUBLIC PROC [artworkTool: Viewer] = TRUSTED { artworkToolData: ArtworkToolData _ NARROW[artworkTool.data]; artwork: Artwork _ artworkToolData.artwork; SVCoordSys2d.PlaceAwrtB[artwork.artWRTPad, NIL, SVMatrix2d.Identity[]]; }; <