<> <> <> <> <> DIRECTORY AIS, BasicTime, Containers, SVCoordSys, Feedback, FS, Imager, ImagerColor, ImagerColorPrivate, ImagerInterpress, IO, SVMatrix3d, Menus, Real, Rope, SVShading, SV2d, SV3d, SVArtwork, SVArtworkUser, SVCaret, SVCoordSys2d, SVDraw, SVFiles, SVInterfaceTypes, SVMappings, SVModelTypes, SVSceneTypes, SVMatrix2d, SVSelections, SVViewerTools, ViewerClasses, ViewerTools, ViewerOps; SVArtworkUserImpl: CEDAR PROGRAM IMPORTS AIS, BasicTime, SVCoordSys, Feedback, FS, Imager, ImagerColor, ImagerColorPrivate, ImagerInterpress, IO, SVMatrix3d, Real, Rope, SVShading, SVArtwork, SVCaret, SVCoordSys2d, SVDraw, SVFiles, SVMappings, SVMatrix2d, SVSelections, SVViewerTools, ViewerOps, ViewerTools EXPORTS SVArtworkUser = BEGIN Artwork: TYPE = SVModelTypes.Artwork; Slice: TYPE = SVSceneTypes.Slice; SliceList: TYPE = SVSceneTypes.SliceList; 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 = SVSceneTypes.Primitive; Shape: TYPE = SVSceneTypes.Shape; Tube: TYPE = SVModelTypes.Tube; Vector3d: TYPE = SV3d.Vector3d; Viewer: TYPE = ViewerClasses.Viewer; SVData: TYPE = SVInterfaceTypes.SVData; 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] _ SVShading.ExtractRGB[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] _ SVShading.ExtractRGB[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: Imager.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[]]; }; <