GGSlice.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Last edited by Bier on January 14, 1987 7:11:44 pm PST
Contents: Implements the various slice classes in Gargoyle.
Pier, December 11, 1986 3:33:25 pm PST
DIRECTORY
GGBasicTypes, GGInterfaceTypes, GGModelTypes, Imager, ImagerFont, ImagerTransformation, Interpress, NodeStyle, Rope, ViewerClasses;
GGSlice:
CEDAR
DEFINITIONS
IMPORTS Imager = BEGIN
EntityGenerator: TYPE = GGModelTypes.EntityGenerator;
BoundBox: TYPE = GGModelTypes.BoundBox;
Color: TYPE = Imager.Color;
DisplayStyle: TYPE = GGInterfaceTypes.DisplayStyle;
Point: TYPE = GGBasicTypes.Point;
PointGenerator: TYPE = GGModelTypes.PointGenerator;
PointPairGenerator: TYPE = GGModelTypes.PointPairGenerator;
Scene: TYPE = GGModelTypes.Scene;
Slice: TYPE = GGModelTypes.Slice;
SliceClass: TYPE = GGModelTypes.SliceClass;
SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor;
Vector: TYPE = GGBasicTypes.Vector;
Viewer: TYPE = ViewerClasses.Viewer;
SliceBoundBoxProc: TYPE = GGModelTypes.SliceBoundBoxProc;
SliceCopyProc: TYPE = GGModelTypes.SliceCopyProc;
SliceDrawPartsProc: TYPE = GGModelTypes.SliceDrawPartsProc;
SliceDrawTransformProc: TYPE = GGModelTypes.SliceDrawTransformProc;
SliceDrawSelectionFeedbackProc: TYPE = GGModelTypes.SliceDrawSelectionFeedbackProc;
SliceDrawAttractorFeedbackProc: TYPE = GGModelTypes.SliceDrawAttractorFeedbackProc;
SliceTransformProc: TYPE = GGModelTypes.SliceTransformProc;
SliceDescribeProc: TYPE = GGModelTypes.SliceDescribeProc;
SliceFileoutProc: TYPE = GGModelTypes.SliceFileoutProc;
SliceFileinProc: TYPE = GGModelTypes.SliceFileinProc;
SliceEmptyPartsProc: TYPE = GGModelTypes.SliceEmptyPartsProc;
SliceNewPartsProc: TYPE = GGModelTypes.SliceNewPartsProc;
SliceUnionPartsProc: TYPE = GGModelTypes.SliceUnionPartsProc;
SliceDifferencePartsProc: TYPE = GGModelTypes.SliceDifferencePartsProc;
SliceMovingPartsProc: TYPE = GGModelTypes.SliceMovingPartsProc;
SliceFixedPartsProc: TYPE = GGModelTypes.SliceFixedPartsProc;
SliceAugmentPartsProc: TYPE = GGModelTypes.SliceAugmentPartsProc;
SlicePointsInDescriptorProc: TYPE = GGModelTypes.SlicePointsInDescriptorProc;
SlicePointPairsInDescriptorProc: TYPE = GGModelTypes.SlicePointPairsInDescriptorProc;
SliceNextPointProc: TYPE = GGModelTypes.SliceNextPointProc;
SliceNextPointPairProc: TYPE = GGModelTypes.SliceNextPointPairProc;
SliceClosestPointProc: TYPE = GGModelTypes.SliceClosestPointProc;
SliceClosestPointAndTangentProc: TYPE = GGModelTypes.SliceClosestPointAndTangentProc;
SliceClosestSegmentProc: TYPE = GGModelTypes.SliceClosestSegmentProc;
SliceLineIntersectionProc: TYPE = GGModelTypes.SliceLineIntersectionProc;
SliceCircleIntersectionProc: TYPE = GGModelTypes.SliceCircleIntersectionProc;
SliceHitDataAsSimpleCurveProc: TYPE = GGModelTypes.SliceHitDataAsSimpleCurveProc;
SliceSetStrokeWidthProc: TYPE = GGModelTypes.SliceSetStrokeWidthProc;
SliceGetStrokeWidthProc: TYPE = GGModelTypes.SliceGetStrokeWidthProc;
SliceSetStrokeColorProc: TYPE = GGModelTypes.SliceSetStrokeColorProc;
SliceGetStrokeColorProc: TYPE = GGModelTypes.SliceGetStrokeColorProc;
SliceSetFillColorProc: TYPE = GGModelTypes.SliceSetFillColorProc;
SliceGetFillColorProc: TYPE = GGModelTypes.SliceGetFillColorProc;
SliceSetArrowsProc: TYPE = GGModelTypes.SliceSetArrowsProc;
SliceGetArrowsProc: TYPE = GGModelTypes.SliceGetArrowsProc;
NotFound: SIGNAL;
FontNameError: SIGNAL;
Creation and Queries about Slice Classes
RegisterSliceClass: PROC [class: SliceClass];
FetchSliceClass: PROC [name: ATOM] RETURNS [class: SliceClass];
Creation, Modification and Queries about Slices
CopySlice: PROC [slice: Slice] RETURNS [copy: Slice];
DeleteSlice: PROC [scene: Scene, slice: Slice];
EntitiesInSlice: PROC [slice: Slice] RETURNS [entityGenerator: EntityGenerator];
Text Slices
BuildTextSliceClass: PROC [] RETURNS [class: SliceClass];
MakeTextSlice: PROC [text: Rope.ROPE, fontName: Rope.ROPE, color: Imager.Color ← Imager.black, transform: ImagerTransformation.Transformation, amplifySpace: REAL, dropShadowsOn: BOOL ← FALSE, dropShadowOffset: Vector ← [0.0, 0.0], shadowColor: Imager.Color ← Imager.black, feedback: ViewerClasses.Viewer] RETURNS [slice: Slice];
GetText: PROC [slice: Slice] RETURNS [text: Rope.ROPE];
AppendText: PROC [slice: Slice, text: Rope.ROPE];
BackspaceText: PROC [slice: Slice];
SetTextFont: PROC [slice: Slice, fontName: Rope.ROPE, feedback: ViewerClasses.Viewer];
GetTextFont: PROC [slice: Slice] RETURNS [font: ImagerFont.Font, fontName: Rope.ROPE];
SetTextAmplifySpace: PROC [slice: Slice, amplifySpace: REAL, feedback: ViewerClasses.Viewer];
GetTextAmplifySpace: PROC [slice: Slice] RETURNS [amplifySpace: REAL];
SetTextColor: PROC [slice: Slice, color: Imager.Color, colorName: Rope.ROPE];
GetTextColor: PROC [slice: Slice] RETURNS [color: Imager.Color, colorName: Rope.ROPE];
FontParamsFromFontName: PROC [fontName: Rope.ROPE] RETURNS [fontFamily: ATOM, fontFace: NodeStyle.FontFace, fontSize: REAL];
DropShadowOn: PROC [slice: Slice, offset: Vector];
DropShadowOff:
PROC [slice: Slice];
A fontName is a font designation with family, size, and face, like Helvetica23BI or TimesRoman6. A colorName is a name from the color naming system in the Cedar ColorTool.
may raise FontStringError
Box Slices
A box is a slice which maintains its rectilinear properties. It is possible to select/drag one of four corners, one of four edges, or the entire box. When a corner is dragged, box is rubberbanded to keep its box shape. When an edge is dragged, only the perpendicular component of the drag vector is used to move the edge, thus maintaining box shape. When the entire box is selected (traj or topLevel), it can be translated and rotated.
Corner: TYPE = {none, ll, ul, ur, lr}; -- lower left, upper left, upper right, lower right
Edge: TYPE = {none, left, right, top, bottom};
BuildBoxSliceClass:
PROC []
RETURNS [class: SliceClass];
transform defaults to the identity.
MakeBoxSlice: PROC [box: BoundBox, corner: Corner, transform: ImagerTransformation.Transformation, strokeWidth: REAL ← 2.0] RETURNS [sliceD: SliceDescriptor];
Circle Slices
BuildCircleSliceClass: PROC [] RETURNS [class: SliceClass];
MakeCircleSlice: PROC [origin: Point, outerPoint: Point, strokeWidth: REAL ← 2.0, strokeColor: Imager.Color ← Imager.black, fillColor: Imager.Color ← NIL] RETURNS [sliceD: SliceDescriptor];
Interpress Slices
BuildIPSliceClass: PROC [] RETURNS [class: SliceClass];
MakeIPSliceFromMaster:
PROC [ipMaster: Interpress.Master, pixelsPerUnit:
REAL ← 2834.646, fullName: Rope.
ROPE ←
NIL, feedback: Viewer, transform: ImagerTransformation.Transformation ←
NIL, includeByValue:
BOOL]
RETURNS [slice: Slice];
pixelsPerUnit explains what the unit was when the interpress master was made. The default value is for meters.
MakeIPSliceFromMaskPixel: PROC [pa: Imager.PixelArray, color: Color, feedback: Viewer, transform: ImagerTransformation.Transformation ← NIL] RETURNS [slice: Slice];
MakeIPSliceFromMaskBits: PROC [base: LONG POINTER, wordsPerLine: NAT,
sMin, fMin, sSize, fSize: NAT, tx, ty: INTEGER ← 0, color: Color, feedback: Viewer, transform: ImagerTransformation.Transformation ← NIL] RETURNS [slice: Slice];
SetIncludeByValue: PROC [slice: Slice, includeByValue: BOOL];
GetIncludeByValue: PROC [slice: Slice] RETURNS [includeByValue: BOOL];
NoOp Class Routines
In GGSliceImplC.NoOpBoundBox
NoOpBoundBox: SliceBoundBoxProc;
NoOpCopy: SliceCopyProc;
Drawing
NoOpDrawParts: SliceDrawPartsProc;
NoOpDrawTransform: SliceDrawTransformProc;
NoOpDrawSelectionFeedback: SliceDrawSelectionFeedbackProc;
NoOpDrawAttractorFeedback: SliceDrawAttractorFeedbackProc;
Transforming
NoOpTransform: SliceTransformProc;
Textual Description
NoOpDescribe: SliceDescribeProc;
NoOpFileout: SliceFileoutProc;
NoOpFilein: SliceFileinProc;
Hit Testing
NoOpEmptyParts: SliceEmptyPartsProc;
NoOpNewParts: SliceNewPartsProc;
NoOpUnionParts: SliceUnionPartsProc;
NoOpDifferenceParts: SliceDifferencePartsProc;
NoOpMovingParts: SliceMovingPartsProc;
NoOpFixedParts: SliceFixedPartsProc;
NoOpAugmentParts: SliceAugmentPartsProc;
NoOpPointsInDescriptor: SlicePointsInDescriptorProc;
NoOpPointPairsInDescriptor: SlicePointPairsInDescriptorProc;
NoOpNextPoint: SliceNextPointProc;
NoOpNextPointPair: SliceNextPointPairProc;
NoOpClosestPoint: SliceClosestPointProc;
NoOpClosestPointAndTangent: SliceClosestPointAndTangentProc;
NoOpClosestSegment: SliceClosestSegmentProc;
NoOpLineIntersection: SliceLineIntersectionProc;
NoOpCircleIntersection: SliceCircleIntersectionProc;
NoOpHitDataAsSimpleCurve: SliceHitDataAsSimpleCurveProc;
Style
NoOpSetStrokeWidth: SliceSetStrokeWidthProc;
NoOpGetStrokeWidth: SliceGetStrokeWidthProc;
NoOpSetStrokeColor: SliceSetStrokeColorProc;
NoOpGetStrokeColor: SliceGetStrokeColorProc;
NoOpSetFillColor: SliceSetFillColorProc;
NoOpGetFillColor: SliceGetFillColorProc;
NoOpSetArrows: SliceSetArrowsProc;
NoOpGetArrows: SliceGetArrowsProc;
END.