GargoyleDoc.tioga
Copyright Ó 1988, 1989, 1992 by Xerox Corporation. All rights reserved.
Pier, June 16, 1992 11:26 am PDT
Maureen Stone, October 2, 1987 6:12:52 pm PDT
Eisenman, October 6, 1987 12:44:26 pm PDT
Bier, March 22, 1993 5:03 pm PST
Doug Wyatt, June 7, 1988 1:06:53 pm PDT
The Gargoyle Reference Manual
CEDAR 10 —
The Gargoyle Reference Manual - Revised for Cedar10
Eric A. Bier and Ken Pier
© Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Xerox Corporation. All rights reserved.
Abstract: Gargoyle is an interactive 2D illustrator for creating color pictures. Gargoyle includes novel features to aid the user in precise geometric placement of objects in the scene. These features are called "snap-dragging" and "alignment objects." Refer to the Gargoyle tutorial (GargoyleTutorial.tioga) for an introduction to the features and uses of Gargoyle. Gargoyle is under constant development; the user should be prepared for changes in both functionality and user interface.
Created by: Eric A. Bier and Ken Pier
Maintained by: GargoyleImplementors:PARC:Xerox
Keywords: graphics, illustrators, interactive, snap-dragging, alignment objects
XEROX Xerox Corporation
Palo Alto Research Center
3333 Coyote Hill Road
Palo Alto, California 94304
Introduction
This document is a reference manual. It provides a description of the features which have been implemented in Gargoyle thus far, as seen by the user. A tutorial introduction is also available (GargoyleTutorial.tioga). The Gargoyle implementors recommend that you execute the tutorial and read this manual before cutting loose with Gargoyle.
You will want to have a running Gargoyle while you are reading this.
To run Gargoyle, simply type Gargoyle to a Cedar CommandTool, followed by carriage return:
% Gargoyle
A single, clean Gargoyle viewer should appear, iconic. It may be accompanied by a separate Gargoyle control panel. Open one or both icons by moving the cursor over the icons and clicking the middle mouse button.
The remainder of this document describes terms used in Gargoyle, the Gargoyle features which are available via the mouse, the features provided by the menus in the order in which the menu buttons appear, and the features provided via keyboard input.
Terms
Action area. The viewer in which interactive user operations create and manipulate the graphical scene. The action area appears below the control panel or in a separate associated viewer if the user so desires.
Alignment line. A greyed straight line or circle for use during an operation which requires precision, such as dragging, rotating, scaling, and rubberbanding. Which lines appear depends on the objects in the scene which generate the lines (explicitly hot objects and objects chosen by heuristics based on the operation being performed), and which types of alignment objects the user has activated on the control panel. Alignment lines are gravity active.
Anchor. The center of rotation and the center of scaling. Currently appears as shown below. The anchor is oriented, gravity-active and hot; it generates alignment slope lines, a single alignment angle line, alignment radius circles, and alignment parallel distance line, all relative to its orientation. See caret.
Caret. The V shaped object (often pointing up) which appears during most interactive operations. The caret is used as the first endpoint of new segments, the insertion point for new text strings, the center of new circles, -- in general, the start point of new graphical objects. It also acts as a kind of tugboat, pulling selected objects toward some object to which it is attracted by gravity. The caret is oriented, usually with the caret normal perpendicular to the tangent of whatever curve it is on, or with vertical normal in free space. The anchor is always created at the caret position, with anchor normal aligned to the caret normal.
Cluster. A hierarchical collection of graphical objects. Clusters are multi-level and may be constructed of other clusters, outlines, or leaf objects. Clusters are made and unmade by user action. All the elements of a cluster may be simultaneously selected and operated on as a unit.
Control Panel. The set of buttons and menus above the action area or in a separate associated viewer if the user so desires.
Control point. Curved segments have points associated with them, called control points, which define their shape. Control points are drawn in Gargoyle as small solid squares which are normally invisible, become solid white squares as needed for attracting the caret or when a related object is selected, and become solid black squares when they are selected.
Edit Constraints. Constraints that determine how the control points of adjacent Bezier curve segments will behave as one of the segments, or its parts, are dragged. The currently available constraints are none, tangent and length. Performing a drag while in a constrained mode will cause the affected joint to maintain shape; thus if tangent continuity existed at the joint before the drag, it will afterwards. Higher order continuity is not preserved.
Feedback Line. A one line label at the bottom of the control panel in which Gargoyle displays feedback and error messages for the user.
Fence. See Holes.
Frozen. A cluster may be frozen or thawed by user action. Frozen clusters will not allow editing of the individual elements of the cluster. Freezing of clusters is NYI.
Gravity Active. An object is gravity active if the caret will "snap" to that object during a caret positioning operation or an operation using caret motion such as dragging, rotating, scaling, and rubberbanding. All objects in a scene which are not themselves in motion will be gravity active, all alignment lines are gravity active, and some intersection points among alignment lines and scene objects are gravity active.
Gravity Extent. The farthest the cursor can be from a gravity active object and still map the caret onto that object. The user interactively sets the gravity extent.
Gravity. The mapping from cursor position to caret position. This mapping often "snaps" the caret onto a trajectory or an alignment line in the scene; the caret is "snapped" to a gravity active object when the cursor moves to within the gravity extent of that object. Two types of gravity are available, called PreferPoints gravity and PreferLines gravity. The user interactively chooses the desired type. The user may also turn gravity off completely, even while an interactive operation (like dragging) is in progress.
Holes. An outline may consist of a single closed object (a fence), and a number of subsidiary closed objects called holes. The fence and its holes are rendered using wrap numbers; the graphical effect is that of a window or hole through the opaque fence through which scene objects behind the fence appear. See Holes in the Edit menu below.
Hot Objects. A joint or segment is hot if it triggers alignment objects. Hot joints can trigger slope lines, and alignment circles. Hot segments can trigger angle lines and parallel "distance" lines. The anchor acts as a hot joint and as a special hot segment. Segments and joints are made hot or cold by explicit user actions and, when enabled, by heuristics based on the operation being performed. Hot joints are drawn in Gargoyle as white squares larger than the squares used to show control points.
Joint. An endpoint of a segment. Every segment has two joints. Joints are drawn in Gargoyle as small squares which are normally invisible, become solid white squares with a dot in the center as needed for attracting the caret or when a related object is selected, and become solid black squares when they are selected.
NYI. Not yet implemented.
NLI. No longer implemented.
Outline. A set of objects considered as a group for rendering purposes. Most outlines contain a single trajectory (open or closed), but a closed trajectory with holes in it is represented by a single outline composed of several closed objects. Trajectories never appear alone; they are always contained in an outline.
Point. The noun, not the verb. One point is 1/72 (0.01388889) of an inch.
Scene. The set of graphical objects currently in the Gargoyle viewer. The scene includes the graphical objects created by the user and alignment lines created by Gargoyle for the user.
Segment. A single straight line segment, circular arc, piece of a conic, cubic Bezier curve, or interpolating spline. A segment has two endpoints called joints. Also called a stroke.
Select. the act of initiating or extending the selection. Selecting is usually done via pointing and clicking, though some menu operations and keyboard accelerators perform selection actions. Selections occur at certain levels, described in the Interactive Features section, below.
Selection. the set of objects that have been designated by the select operation(s). The selection comprises the set of objects that will be operands to specified operations.
Slice. A graphical object which is either an outline or a member of a class of graphical objects. Clusters, outlines, text strings, boxes, circles, and pieces of Interpress files are currently implemented as slice classes. Slices define their behavior via the classing mechanism supported in the implementation of Gargoyle.
Top level object(s). An object in the scene not contained in another (parent) object.
Trajectory. A connected sequence of line segments and/or curve segments. Trajectories may be open or closed; a closed trajectory is called a fence.
Interactive Features
A summary of the Gargoyle mouse/keyboard actions can viewed at any time by invoking the MouseActions command in the Help menu on the control panel; a Tioga viewer will open, summarizing the Gargoyle commands. Grow the help viewer for a more complete summary of Gargoyle commands. Interactive user actions which use combinations of the Shift, Control, and mouse button keys can be aborted by typing Delete before releasing either mouse buttons or Shift/Control keys, just like in Tioga. In the following, Control indicates holding down the Control key, Shift^ indicates holding down either Shift^ key. These interactive user actions are:
Caret Position. Hold down Shift and the left mouse button while moving the cursor in the action area. The caret will appear and will follow the cursor; if the caret nears a gravity-active object it will snap to it and stick as long as Shift and the left mouse button are held down and moved near the attractor object. If gravity snaps the cursor onto an object, its joints and control points will temporarily appear as attractor feedback. The feedback line will display useful textual information about objects which attract the caret during this operation. N.B.: it is easy to confuse this operation with the Select Joint operation; the Caret Position operation will not change the current selection.
Select Joint. Hold down the left mouse button and move the cursor in the action area. If gravity snaps the cursor onto a joint or control point, the joint or control point will temporarily be highlighted (appear as a filled black square). If a point is highlighted, its related joints and control points will also appear, unhighlighted. Releasing the mouse button at this point will cause all previously selected objects to be deselected and the highlighted joint or control point to become selected. This operation is called selecting at the joint level. N.B.: it is easy to confuse this operation with the Caret Position operation.
Select Segment. Hold down the middle mouse button and move the cursor around. If gravity snaps the cursor onto a segment, its end joints will temporarily be highlighted (appear as a filled black square). If the segment is a curve its control points will appear. Releasing at this point will cause all previously selected objects to be deselected and that segment to become selected. The segment, joints, and control points will remain highlighted as selection feedback. This operation is called selecting at the segment level.
Select Trajectory. Double click the middle mouse button, holding down on the second stroke. Then move around as in Select Joint. If gravity snaps the cursor onto a graphical object, all of its parts (e.g. joints, segments, control points) become highlighted. Releasing at this point will cause all previously selected objects to be deselected and that object to become selected. This operation is called selecting at the trajectory level, for historical reasons, although objects other than trajectories (e.g. boxes, circles, text) may be selected at this level. If filled paths are present, the topmost such path (in overlap order) will be selected, unless the cursor is near an unfilled path that is even more forward (in overlap order), in which case the top level object containing that path will be selected.
Select TopLevel. Double click the left mouse button, holding down on the second stroke. Then move around as in Select Joint. If gravity snaps the cursor onto a top level object, all of its components become highlighted; a top level object is an object which is a component of no other object. Releasing at this point will cause all previously selected objects to be deselected and that top level object to become selected. A top level selection may be extended to any number of top level objects via the Extend Selection operation. If filled paths are present, the top level object that contains the topmost such path (in overlap order) will be selected, unless the cursor is near an unfilled path that is even more forward (in overlap order), in which case the top level object containing that path will be selected.
Extend Selection. Hold down the right mouse button and move around. If gravity snaps the cursor onto an object or object part which may be selected at the same level as the previous successful selection level, releasing at this point will ADD the object or part to the current selection. Extend selection may be repeated indefinitely and is usually invoked after an initial successful selection. Extend selection is often repeated to build a temporary collection of objects for use as operands to an interactive operation. Note that extending at the segment level within a single trajectory will make a new selection of all segments in that trajectory between the original selected segment and the extended segment. Since trajectories are ordered, extend segment selection may wrap around from the end to the beginning of a trajectory.
META Extend Selection. Hold down the R15 key (also known as the SWAT key from the old days) and initiate a selection operation (Select Joint/Segment/Trajectory/TopLevel) as before. When you release the mouse button and the R15 key, the selected object or object part will be ADDED to the existing selection rather than replacing the existing selection. It is thus possible to (meta)select heterogeneous objects, say a mixture of joints, segments, and trajectories, for a subsequent operation like Drag or Delete. META Extend Selection may be repeated indefinitely.
Select with Box. Position one corner of a box using the Caret Position operation (above). Move the cursor, then double click the right mouse button, holding down on the second stroke. A box will appear (originating from the caret position) which may be rubberbanded exactly as in the Add Box command (below). When the button is released, the box will disappear and all objects whose bounding box lies completely within the box will become the current selection.
Deselect Joint/Segment/Trajectory/TopLevel. Hold down Control and Shift^ to convert selection operations into deselection operations. Use the same mouse buttons as in the corresponding selection operations.
ExtendDeelection. NYI.
Add Line. Add Line creates a new straight line segment whose endpoints are the caret and the current cursor position. ShiftMiddleMouse initiates AddLine. Holding down the mouse button causes new alignment objects of the activated types to appear (if the Auto option is on) and the caret to jump to the cursor so the new endpoint can be placed with precision. The user may continue to hold down the mouse button and move the mouse; the new line will be rubberbanded accordingly. If the user selected an end joint of an open trajectory (using joint selection) before invoking AddLine, the new segment will extend the current trajectory, and the new segment will get its looks from the segment of the selected end joint. If the user did not select an end joint of an open trajectory before invoking AddLine, a new outline will be created and the new outline segment will get its looks from the current default looks, which are settable by the user.
Add Bezier. Similar to Add Line. ShiftRightMouse causes a new Bezier segment to be created. If an end joint of a bezier segment which is also the end joint of a trajectory is selected, and an edit constraint is turned on, the new bezier segment will be created tangent continuous to the selected joint and with a second joint at the cursor position when ShiftRightMouse is depressed. The user may hold down ShiftRightMouse at the desired second joint position and then move the mouse; the motion will cause the tangent vector at the "unconstrained" joint to appear; the tangent vector may be rubberbanded. The new bezier will rubberband accordingly. When Shift and RightMouse are released, the segment is completed. The entire operation can be aborted at any time up to the final completion of the bezier segment. If no edit constraints are on, or the end joint of a bezier is not selected, then the user will specify a new bezier in two stages. In the first stage, the initial joint and control point are specified. Place the caret at the desired first joint position. Hold down ShiftRightMouse and drag out the first tangent control vector. WHILE CONTINUING TO HOLD Shift DOWN, release RightMouse, then move the cursor to the desired second joint position, then hold RightMouse down again and drag out a second control vector. When Shift and RightMouse are released, the segment is completed. The entire operation can be aborted at anytime up to the final completion of the bezier segment. Legal Bezier constraint types are none, tangent, and length. Constraint tangent enforces tangent constraints as outlined above. Constraint length enforces tangent constraints and also constrains the vectors from the joint to each of the constrained control points to be the same length. Use the Curves menu to set, show, and apply the current constraint type.
Add Box. Create a new box object whose corners are the caret and the current cursor position. ShiftDoubleRightMouse initiates AddBox. Holding down the mouse button and moving the mouse causes alignment lines to appear (if the Auto option is on) and the caret to jump to the cursor corner of the box, so the new corner can be placed with precision. The user may continue to hold down the mouse button and move the mouse; the new box will be rubberbanded accordingly. Boxes may be translated/rotated/scaled as usual and will retain their box characteristics. Boxes are displayed with control points at their corners and center. Dragging a corner or an edge of a box will grow/shrink the box rectilinearly. Transforming a box selected as a trajectory or top level object will transform the entire box.
Drag. CtrlLeftMouse initiates dragging. All selected objects are translated, maintaining a constant relationship to the caret. Dragging is usually performed in stages. First, select the objects to be dragged; if parts of objects are selected, then those objects will be rubberbanded. Second, place the caret on that joint or segment which must be positioned with precision if the selection operation has not already positioned the caret for you. Next, position the cursor as desired. As the left mouse button is pushed down, the caret will snap to the cursor. Finally, continue to hold down the Control key and the mouse button and move the mouse. The caret will be attracted to gravity active objects as usual, taking all of the selected objects with it.
Rotate. CtrlMiddleMouse initiates rotation. Very much like Drag. Rotate has an optional extra preliminary step -- the Anchor can be placed to be used as a center of rotation. This can be done using the DropAnchor command in the HotSpots menu, or from the keyboard (CtrlA drops the anchor at the caret. CtrlShiftA deletes the anchor). Select the objects to be rotated; if parts of objects are selected, then those objects will be rubberbanded. Because the objects move with 1 degree of freedom while the mouse has two, the caret does not remain in a constant relationship with the objects being rotated. However, the caret does snap to the cursor when the operation begins so objects can be rotated with precision. The angle of rotation is the angle between two vectors: the Anchor to initial-caret-position vector, and the Anchor to current-caret-position vector. If no anchor is dropped, the center of the bounding box of the selected objects is used as an anchor point.
Scale. CtrlRightMouse initiates scaling. Very much like rotate. The Anchor is the center of scaling. The scaling factor is the ratio of <the current caret to Anchor distance> to <the initial caret to Anchor distance>. Scaling to zero is discouraged. If no anchor is present, the center of the bounding box of the selected objects is used as an anchor point.
Skew. CtrlDoubleRightMouse initiates an interactive skewing transformation. Skew is similar to Drag. The line of invariance is the line that passes through the anchor and is perpendicular to the line from the anchor to the initial caret position. The scene point at which the caret was placed before the operation is translated to stay with the caret, skewing everything else as necessary. This operation is experimental and will probably be bound to a different mouse button in the near future. If no anchor is present, the center of the bounding box of the selected objects is used as an anchor point, and a horizontal line through that point is used as the line of invariance.
Copy And Drag. CopyAndDrag is initiated by CtrlDoubleLeftClick. Hold down the Control key and double click. A copy of the selection is created and then selected. It may be immediately dragged by moving the mouse without releasing any button. The copy will first appear translated from the original by the vector defined by the caret and cursor when Copy And Drag is initiated.
Interactive feedback is provided in the scene and in the feedback line. When doing a caret position, select, or drag operation, objects will highlight their joints and control points as the cursor is attracted to them, unless they are themselves in motion. If an object has a part of it made hot, it will continually display its joints and control points as hot. During interactive selection/deselection operations, highlighting will reflect the selection/deselection that will occur when the mouse button is released. This flicking on and off of joints and control points is required in order to keep a scene from becoming completely cluttered with joint and control point feedback.
Graphical selection feedback occurs to indicate the current selection. Joint and control point selection feedback has already been described. As the number of selected items grows, selection feedback is reduced to a double width black box per object (instead of individual joints and control points) plus a thin box surrounding the entire selection. In addition, if a selected object is a member of a cluster, the bounding box of the cluster is drawn whenever any other selection feedback for that object appears.
Whenever the caret is moving around, the feedback line will be continually updated with a description of the object that the caret is on or attracted to.
Menu Features
Control Panel Overview
[Artwork node; type 'Artwork on' to command tool]
Pop-up button names appear in italic face in the control panel. A pop-up button menu will appear near its name when any mouse button is held down over a pop-up button. To select a pop-up button action, move the cursor over the menu item; notice that item-specific documentation is displayed for each item. To invoke the selected command, release the mouse button. To abort a pop-up button, release anywhere outside the menu. To get help for a particular pop-up button menu, select and invoke the Help option in the menu.
BE CAREFUL! Pop-up buttons may also perform actions when you quick-click over the button without holding down the mouse button. This is easy to do accidently. A user profile option, Gargoyle.QuickClickEnable (default: FALSE) enables these pop-up button accelerators. We suggest you don't turn them on for a while, until you are accustomed to pop-up buttons. Automatic documentation in pop-up button menu items should help a lot. See PopUpButtonsDoc.tioga in the CedarCommon documentation for more information on pop-up buttons.
Pop-up button menu items are labeled with a suggestive name and may be followed by the string "[T]", "[G]", or "[GT]". These strings are hints that their associated commands require as arguments a Tioga selection or caret placement ([T]), a Gargoyle selection of one or more objects ([G]), or both Gargoyle and Tioga selections ([GT]).
Control panel items which represent binary modes are displayed as buttons with borders. The mode is on or enabled when the button is video reversed with white text on black background. Menus Gravity, Midpts, Auto, Alignments are binary mode buttons.
Multiple choice mode controls consist of a bordered button and a read-only field which contains the current mode of choice. ScreenStyle: and GravType: are the two current multiple choice menus, although GravType has only two choices. It is possible to move forwards (left click over button) and backwards (middle or right click over button) through the choices.
GravExtent: is a simple button. Clicking it will cause the current value of the gravity extent to be printed on the feedback line. Next to it is a special button called a graphics button. Its display is a graduated slider showing the current gravity extent value in units of points (1/72 of an inch). Clicking over the display with left button will halve the gravity extent; clicking with right button will double the extent. Clicking with middle button will restore the default extent (currently 25 points). For values greater than 50 points, the slider pointer will disappear to the right.
There are four alignment menus: Slope:, Angle:, Radius:, and LineDist:. Each menu consists of a label, three command buttons (Get!, Add!, Delete!) and a viewer full of Tioga buttons which indicate values and states for the four types of alignment objects. The alignment menus are explained in detail below in the section on activating and deactivating alignment objects. Each alignment menu has a corresponding text viewer in the penultimate line of the control panel. These viewers are automatically updated during various Gargoyle operations and may be explicitly updated by the user as an editable Tioga viewer. The viewer contents are used as operands by the Add! commands. The "units" of distance for these commands is usually inches, but the units can be set to any value via the Units menu.
The bottom line of the control panel is the feedback line, where Gargoyle provides feedback messages to the user. This line is implemented for performance reasons as a Viewer Label and its contents is not selectable. To obtain selectable feedback, open the typescript by clicking the Typescript button.
BiScroller Buttons
In the control panel, the first row of pop-up buttons, Scale, Rotate, Fit, Reset, Edge, Prev, CenterFit, Details are BiScroller buttons. The BiScrollers package provides horizontal and vertical scrolling for Gargoyle scenes and also provides temporary view operations via the first button line of the control panel. These operations (Scale, Rotate, Fit, Reset, Edge, Prev, CenterFit) should not be confused with the permanent operations applied to Gargoyle scene objects using Gargoyle operations. That is, scaling, rotating, translating, or fitting via the operations in these buttons does not transform the actual Gargoyle objects but only the view of these objects. For more information about BiScrollers transformations and how to use them see BiScrollersDoc.tioga in the CedarCommon documentation.
Scrolling
The scroll bars are at the left edge and bottom edge of the action area. They appear when the cursor moves into those areas. Left clicking moves up (or left), right clicking moves down (or right). Middle click "thumbs", as in Tioga. The amount of scrolling is always specified by the distance between the top (or left) edge of the scroll bar and the cursor in the scrollbar. The direction of scrolling is specified by clicking left or right mouse buttons.
Scale, Rotate, Fit, Reset, Edge
All of these operations change the transformation between the Gargoyle scene and the viewer, allowing the user to see more or less detail and to view different parts of a large scene. For more information, see BiScrollersDoc.tioga.
WARNING: Scaling and rotating by uneven values (i.e. non-integer values) may cause Gargoyle refresh to slow to a crawl.
FitXY (Fit menu) is NYI (and never will be for Gargoyle).
The vanilla transformation (Reset menu) is unity scale with the center of an 8.5x11 inch frame in the center of the viewer.
Prev
The Prev button is like the Tioga PrevPlace button; it returns the viewport to where it was at the last BiScrollers operation with the exception of Scroll, Scale, and Rotate. In other words, scrolling, scaling, and rotating do not change the previous place; other BiScroller operations remember their current place before transforming the viewport. Invoking the Prev button causes the previous place and the current place to swap.
CenterFit Menu
CenterSel
CenterSel will cause the bounding box of the currently selected Gargoyle objects to be centered in the viewer. If there is no selection, the caret position will be centered in the viewer.
CenterCaret
CenterCaret will cause the caret to be centered in the viewer, regardless of the selection.
FitSel
FitSel will cause a BiScrollers Fit operation so that the bounding box of the currently selected Gargoyle objects is scaled and translated to fit in the viewer.
Details Menu
SetBiScrollersTransform
Takes a transformation from the Tioga selection in factored form, (e.g. [r1: 0.0 s: [1.0 1.0] r2: 0.0 t: [0.0 -26.0]]) and sets the BiScrollers transformation to this value. r1 and r2 are rotations in degrees, s is a pair of scalars, and t is a translation vector.
ShowBiScrollersTransform
Shows the current BiScrollers transformation in the factored form described above.
Refresh Menu
Refresh simply forces a complete refresh of the Gargoyle scene, and is almost never used since the scene refreshes automatically.
Active Button
Gargoyle works in conjunction with another software package, Embedded Buttons, which allows Gargoyle objects to serve as buttons in control panels. When the GGActive command has been given in a CommandTool and the Active button is video reversed, activity is turned on. For normal editing operations, activity should be off and GGActive is not needed.
Props Menu
SetProp
Add a property of the form "key value" in the Tioga selection to the selected Gargoyle objects.
GetProp
Show the "value" associated with the property "key" in the Tioga selection for the selected Gargoyle objects.
RemoveProp
Remove the "key" in the Tioga selection (and its corresponding value) from the selected Gargoyle objects.
CopyProps
Copy the properties from the last selected Gargoyle object to all other selected Gargoyle objects.
ListProps
List all the keys that are associated with the selected Gargoyle objects.
File Commands
Clear, Restore, Get, Store, Save
These commands all mimic the corresponding Tioga commands.
Clear deletes all objects from the scene and resets the alignment menus to standard alignments. It cannot be undone!
Restore does a Clear, then reloads the latest version of the current Gargoyle file into the viewer. The current file name appears in the Gargoyle viewer caption.
Get does a Clear, then loads the selected Gargoyle file into the viewer. The file name for loading is taken from the current Tioga selection. If not specified, the directory is assumed to be the directory in which the Gargoyle command was given. If no extension is specified, ".gargoyle" will be used.
Store writes all objects in the current scene to the selected filename (again, the startup directory is the default directory and ".gargoyle" is the default extension.).
Save writes all objects in the current scene to the current filename, which appears in the Gargoyle viewer caption.
Merge Menu
MergeAll
Select a filename. If not specified, the directory is assumed to be the directory in which the Gargoyle command was given. If no extension is specified, ".gargoyle" will be used. All Gargoyle objects from the named file will be placed on top of the objects in the current scene and selected. In addition, all of the alignment objects mentioned in the named file will be merged in the Gargoyle alignment menus and will be activated if they are active in the named file.
MergeShapes
Like MergeAll except only the Gargoyle objects from the named file are read.
MergeOptions
Like MergeAll except all of the options (e.g. DefaultFont, DefaultFillColor, ...) are read.
MergeAlignments
Like MergeAll except only the alignment objects are read in.
Stuff Menu
ToTioga
Select the Gargoyle objects to be stuffed. Make a NODE LEVEL selection in a Tioga viewer. If the node is selected pending delete, the Tioga selection will be replaced; otherwise an insert will be performed. Pop-up the Stuff menu and invoke one of ToTioga, ToTiogaBordered, ToTiogaFit, ToTiogaBorderedAndFit. A Tioga node will appear containing the selected objects, appropriately bordered or fit to the Tioga margins. The node is an Interpress artwork node and also contains the Gargoyle external encoding of the selected objects. The picture will be rendered when Artwork is ON in your Cedar environment. This node may later be retrieved into Gargoyle using Get/Grab/Merge/FromTioga.
StuffToTiogaAlt
Same as ToTioga, except that text strings will be stuffed using their alternate fonts. See the Fonts menu documentation below for a discussion of font setting in Gargoyle.
ToFile
Select the Gargoyle objects to be stuffed. Select a filename (just like in Get, above). Pop-up the Stuff menu and invoke StuffToFile. A Gargoyle file will be created containing only the selected objects. Stuffed files may be read with Get or Merge like any other Gargoyle file.
ToFileAlt
Same as StuffToFile, except that text strings will be stuffed using their alternate fonts.
MergeFromTioga, GrabFromTioga, GetFromTioga
These commands take a previously stuffed Gargoyle node as argument in the Tioga selection. GetFromTioga clears the Gargoyle viewer, then reads the selected Gargoyle node and creates a new scene at the original (absolute) location in the Gargoyle coordinate system. GrabFromTioga does a similar thing but tries to relocate the objects from the Gargoyle node to the current viewer position. GrabFromTioga is NYI. MergeFromTioga is like GetFromTioga but does not first clear the viewer.
MergeFromGargoyle
Copy the selected objects in the Gargoyle viewer that has the input focus into the Gargoyle viewer that contains this menu button. The objects are copied so that the copies have the same coordinates in the new viewer as the originals had in the old viewer.
IP (Interpress) Menu
ToFile, ToFileAlt, ToFileSelected
Select an Interpress file name. File names are formed as in the Get command, with the default extension being ".ip". If the Tioga selection is empty and the viewer holds a named file, the new Interpress file will have the same root name as the viewer. The picture visible in the Gargoyle viewer minus alignment objects, control points, anchor, and caret will be saved to the named Interpress master. ToFile sends all objects to the Interpress file; ToFileSelected sends only the selected objects. ToFile and ToFileSelected send all text strings to Interpress using whatever fonts were specified as the primary font for each string. ToFileAlt sends all text strings to Interpress using the alternate fonts. See the Fonts menu documentation below for a discussion of font setting in Gargoyle.
StuffToTioga
Select the Gargoyle objects to be stuffed. Make a node level selection in a Tioga viewer. If the node is selected pending delete, the Tioga selection will be replaced; otherwise an insert will be performed. Pop-up the IP menu and invoke one of StuffToTioga, StuffToTiogaBordered, StuffToTiogaFit, StuffToTiogaBorderedAndFit. A Tioga node will appear containing the selected objects, appropriately bordered or fit to the Tioga margins, which is an Interpress artwork node ONLY and contains NO Gargoyle external encoding of the selected objects. The picture will be rendered when Artwork is ON in your Cedar environment. This node may later be retrieved into Gargoyle using MergeFromTioga.
StuffToTiogaAlt
Same as StuffToTioga, except that text strings will be stuffed using their alternate fonts. See the Fonts menu documentation below for a discussion of font setting in Gargoyle.
MergeIPEditable
Select the file name of an Interpress master. File names are formed as in the Get command, with the default extension being ".ip". MergeIPEditable tries to turn that master into a set of editable Gargoyle objects, and merges them into the current scene. This doesn't work very well yet. If the Interpress master was made by Gargoyle then each trajectory ends up as n trajectories, one for each segment, and closed trajectories come back as both a closed Gargoyle trajectory AND a set of n trajectories, one for each segment. Doing this better is a subject of ongoing research. The merged objects will be selected to allow them to be dragged into place.
When MergeIPEditable finds a MaskPixel call, it formerly created an Interpress Slice. Now it creates a Box Slice, that has an associated PixelArray. By changing the box's fill color, you can change the appearance of this pixel array. Currently, there is no way to get rid of the pixel array from the box. The only way to create a box with a pixel array in it is to use MergeIPEditable.
MergeIPSlice
Select the file name of an Interpress master. File names are formed as in the Get command, with the default extension being ".ip". MergeIPSlice reads the Interpress master into a single slice (called an Interpress slice) and adds that slice to the picture,. The innards of the slice are not Gargoyle objects; the slice may be selected and transformed and written out (by "reference" to the full file name; or by value as a chunk of Interpress). This is useful for reading in "background" IP masters that you do not want in the scene but may want to see for tracing or ruling purposes. The merged slice will be selected to allow it to be dragged into place.
MergeFromTioga
MergeFromTioga takes an Interpress artwork node as argument in the Tioga selection. The Interpress master in that node will be merged into the scene (as in MergeIPEditable, above). It is recommended that Interpress artwork nodes that were stuffed as Gargoyle nodes, using the ToTioga buttons in the Stuff menu, be merged in using the Stuff menu instead of the IP menu.
IncludeByReference, ShowIncludeMode, IncludeByValue
The selected Interpress slices will store themselves by reference (pathname) or by value (encoded Interpress is stored in the Gargoyle file) next time you save your picture. The default is reference.
Script Menu
OpenScript, AppendToScript, CloseScript, PlaybackScript, FastPlayScript
There are two parallel scripting mechanisms, the automatic scripts and the manual scripts. The five actions listed above pertain to manual scripts.
OpenScript saves all of the subsequent editing actions of a session. Select a file name as in the Get command; default extension is ."script". Invoke OpenScript. Until you invoke CloseScript, all of your actions will be saved in the named file.
AppendToScript works like open but takes an existing script name and appends to it.
To playback the session, select the file name and invoke PlaybackScript. The results will be identical if, when playback begins, Gargoyle is in the same state it was in when you invoked OpenScript (e.g. the same alignment lines are selected and the same gravity extent and type are active). Gargoyle could store its state in the log as well, but this is NYI.
FastPlayScript is the same as PlaybackScript except that Refresh is turned off during playback so it will be faster. If Playback fails for some reason, this could leave Gargoyle with Refresh turned off. In this case, hit Revive! to set things right.
ShowScripts
This operation lists all of the scripts, made by the automatic scripting mechanism, that contributed to the current picture. If all has gone well, playing these scripts in order should reconstruct the current picture.
Help Menu
A very important button. On-line documentation.
Mouse Actions
Opens a viewer in the upper right corner with a short reminder of the function of each of the 12 mouse button, Shift^, Control combinations and double click combinations as well. Scroll or Grow this viewer for a full summary of the META commands and the remainder of the Gargoyle user operations.
Fonts
Opens a viewer in the upper right corner with a short reminder of the font forms needed for the SetFont operations in the Fonts menu. Scroll or Grow this viewer for a full summary of the font specification forms used with Gargoyle.
Colors
Opens a viewer in the upper right corner containing a list of Gargoyle files which contain color patches that sample the Cyan-Magenta-Yellow color cube at 10% increments along all three axes. Each file allows cyan and magenta to vary while holding the value of yellow fixed. These files may be used in conjunction with the Palette button to provide color palettes for Gargoyle objects. Scroll or Grow this viewer for a partial list of currently implemented distinct colors and corporate colors.
Revive!
A very important button. If Gargoyle is not responding (usually after an ERROR window has been aborted) or if Gargoyle is acting confused (e.g. displaying objects which you're sure you deleted), this button is for you. It creates a new slack process, restores some invariants and presses on. It almost always works. Invoking Revive with the left mouse button will cause a full repaint; invoking with the right button will avoid repaint which is useful in case it is the refresh itself that is causing the ERROR.
Typescript
If Typescript is clicked, a typescript viewer will be opened and messages for the user may be sent to the typescript as well as to the feedback line. This is useful as a record of what Gargoyle does for you. It is necessary for any operations which require the user to select something that Gargoyle has printed, like a font name or transformation. Selection cannot be done in the feedback line. The typescript may be destroyed by the user and reopened at any time.
Caret Menu
PositionFromSelection
Moves the caret to the position (in current units) specified in the Tioga selection, in the form [<x>, <y>]. (Use ShowValue in the Units menu to see what the current units are.)
ShowCaretValues
Displays the current position (in current units) and angle (in degrees) of the caret.
GrabInputFocus
Moves the input focus to the Gargoyle viewer without disturbing the caret or the Gargoyle selection.
AngleFromSelection
Changes the angle of the caret to the angle (in degrees) specified in the Tioga selection.
ShowAnchorValues
Displays the current position (in current units) and angle (in degrees) of the anchor.
Transform Menu
All of these operations work like their interactive counterparts, but use as argument the current Tioga selection interpreted as one or two real numbers. Rotate and Scale require the Anchor, as usual. ScaleXY, ScaleX and ScaleY provide anamorphic scaling similar to interactive skewing.
Rotate, Rotate 90, UnRotate
Place the Anchor and select some objects. Rotate 90 rotates selected objects counterclockwise about the anchor. For Rotate and UnRotate, select a real number in a text viewer somewhere. Invoke Rotate. The selected objects (or parts of objects) be rotated CCW about the Anchor by the number of degrees selected. Invoke UnRotate. The selected objects (or parts of objects) be rotated CW about the Anchor by the number of degrees selected.
Scale, ScaleXY, UnScale, ScaleX, ScaleY, UnScaleX, UnScaleY
Place the Anchor and select some objects. In a text viewer somewhere, select a real number. Invoke Scale or ScaleX or ScaleY. The selected objects (or parts of objects) will be scaled about the Anchor by the factor selected. If you invoked Scale, the object will be scaled by the same factor in X and in Y. ScaleX scales only the X (horizontal) components of an object, and ScaleY scales only the Y (vertical) components. With ScaleXY, select two real numbers separated by spaces; ScaleX will be invoked with the first number and ScaleY with the second.
Place the Anchor and select some objects. In a text viewer somewhere, select a real number. Invoke UnScale or UnScaleX or UnScaleY. The selected objects (or parts of objects) will be scaled about the Anchor by the reciprocal of the factor selected. If you invoked UnScale, the object will be scaled by the same factor in X and in Y. UnScaleX scales only the X (horizontal) components of an object, and UnScaleY scales only the Y (vertical) components.
Caution: if you use a negative scalar, the selected objects may end up off the window. Don't panic. They are still selected. Immediately after a ScaleX, drag from left to right. The objects should come back.
TranslateX, TranslateY, TranslateXY
Place the Anchor and select some objects. In a text viewer somewhere, select a real number. Invoke TranslateX or TranslateY. The selected objects (or parts of objects) will be translated (in X or Y, as appropriate) by the number of "units" selected. The default "unit" is one inch, but it may be set to other values via the Units menu in the control panel. With TranslateXY, select two real numbers separated by spaces; TranslateX will be invoked with the first number and TranslateY with the second.
MirrorX, MirrorXY, MirrorY
Place the Anchor and select some objects. MirrorX is the same as ScaleX -1.0. MirrorY is the same as ScaleY -1.0. MirrorXY is the same as Rotate 180 degrees.
Six Point
Select trajectories that have two segments each, and make them hot. Call these two double-segment trajectories A and B (A is the first trajectory you selected, B is the second). Deselect them. Select the objects to be transformed. The selected objects will be transformed with the unique affine transformation with takes the first point of trajectory A to the first point of trajectory B, the second point of A to the second point of B, and the third point of A to the third point of B. Unfortunately, this means you have to remember the order in which the double-segment trajectories were drawn, since this determines which is the first point and which is the second in each of the trajectories A and B. You can discover the order by selecting joints and observing the feedback line. Joint 0 comes first, then Joint 1. You also have to remember the order that A and B were selected when you made them hot. This is both a curse and a blessing—by selecting the trajectories in the other order, you can run the transformation backwards.
Four Point
Select two single-segment trajectories, and make them hot. Deselect them. Call these two single-segment trajectories A and B. Select the objects to be transformed. The selected objects will be transformed with the unique rotation and translation transformation with takes the first point of trajectory A to the first point of trajectory B, the second point of A to the second point of B. Unfortunately, this means you have to remember the order in which the single-segment trajectories were drawn. You can discover the order by selecting joints and observing the feedback line. Joint 0 comes first, then Joint 1. You also have to remember the order that A and B were selected when you made them hot. This is both a curse and a blessing—by selecting the trajectories in the other order, you can run the transformation backwards.
Overlap Menu
Gargoyle maintains a priority order for scene objects. When one of these operations is invoked the selected objects will move in the priority order.
Front, ShowValue, Back
Front: Move all selected objects to the front of the scene.
ShowValue: Show the priority number of the selected object. Priority 0 is the back, increasing priority means closer to the front (further ahead the stack of slices).
Back: Move all selected objects to the back of the scene.
ForwardOne, MatchFromSelection, BackOne
ForwardOne: Move all selected objects one slice closer to the front.
MatchFromSelection: Select the object whose priority number is in the Tioga selection.
BackOne: Move all selected objects one slice closer to the rear.
PutInFront, Exchange, PutBehind
PutInFront: Select some number of slices. Extend the selection to a final slice. Invoke PutInFront. All the originally selected slices will be moved in front of the final slice.
Exchange: Select two slices. Invoke Exchange. The slices will exchange priority.
PutBehind: Select some number of slices. Extend the selection to a final slice. Invoke PutBehind. All the originally selected slices will be moved behind the final slice.
ForwardFromSelection, PutAtSelection, BackFromSelection
ForwardFromSelection: Select some number of Gargoyle slices. Select a positive integer with the Tioga selection. Invoke ForwardFromSelection. All the slices will be moved towards the front by the number of slices specified in the Tioga selection.
PutAtSelection: Select some number of Gargoyle slices. Select a positive integer with the Tioga selection. Invoke PutAtSelection. All the selected slices will be moved so that the rearmost selected slice is at the priority specified in the Tioga selection.
BackFromSelection: Select some number of Gargoyle slices. Select a positive integer with the Tioga selection. Invoke DownFromSelection. All the slices will be moved towards the rear by the number of slices specified in the Tioga selection.
Curves Menu
Line, Arc, Conic, Bezier, B-Spline, Natural Spline
All selected segments will become segments of the named type. This may require them to change shape. Arc, Conic, Bezier, and Spline(s) create segments with control points on or near the line between the selected segment endpoints. The control points may then be selected and rubberbanded to form the desired shape. For conics, a real number between 0.0 and 1.0 in the Tioga selection will be used as the eccentricity of the conic when Conic is invoked.
MatchSelectedType
All segments which match the curve type in the Tioga selection will become selected. Curve types are: Line, Straight Arc, Arc, Parabolic Conic, Bezier, Natural, Cyclic Natural, BSpline.
SetEditConstraint, ShowEditConstraint
Used to set edit constraints for use with Bezier segments. Edit constraints can be one of none, tangent or length. Select the appropriate constraint in the Tioga selection and invoke SetEditConstraint.
MakeConstrained
Enforce the current constraint at the joint(s) selected by moving the selected object (joint or control point) to an appropriate position.
Shapes Menu
Circle
This menu operation is the only way to create a new circle. A new circle object with center at the caret will be constructed. Circles may be translated/rotated/scaled as usual and will retain their circular characteristics; circles turn into ellipses if unevenly scaled. Circles are displayed with control points at the center and at 90 degree intervals around the circle. Selecting and dragging a single control point on the circumference will grow/shrink the circle about its center. Selecting and dragging the circle center will translate the circle. Transforming a circle selected at trajectory or top level will transform the entire circle.
Triangle, Square, Pentagon, Hexagon, Octagon
Shapes menu entries are a convenience for making regular polygons. The selected polygon type will be constructed, closed, and filled. The polygon will be centered on the caret and all of its vertices will be 1 scale unit from its center (see Units menu for more on scale units).
Polygon
A regular polygon with number of sides equal to the positive integer in the Tioga selection will be constructed, closed, and filled. The polygon will be centered on the caret and be about 72 points square.
KnotchedLine
Creates a trajectory made of 8 segments, each 0.5 "current units" long. All of the segments are horizontal. Knotched lines are useful when a number of things must be spaced equally. Also, two knotched lines placed at right angles to each other can be used to trigger all sorts of grids (just turn on two kinds of slope line). See also 8.5x11 grid below.
Box
A new box object with center at the caret will be constructed. This is the same kind of box object that can be interactively created with the AddBox operation. See AddBox (above) for documentation on boxes.
SelectedBBox
A new box object bounding the currently selected (in part or in full) objects will be constructed. This is the same kind of box object that can be interactively created with the AddBox operation. See AddBox (above) for documentation on boxes.
Arrow
An easy way to make bland boring 45 degree arrowheads. A single downward pointing arrow will appear with its point at the caret. It has a tail which you can grab to rotate it. It is a single trajectory that doubles back on itself. Use with caution. Currently, the Imager does not properly render trajectories that double back.
8.5x11 (inches), C2700 (TimsToy), 640x480 (pixels), 1024x768 (pixels), 38x50.66 (inches)
A new unfilled box object will be added to the scene. The box is positioned so that the lower left corner is at the origin of the device imaging area, usually but not always location [0.0, 0.0]. This frame is helpful for positioning Gargoyle objects onto a standard printed page; any objects within the frame should appear on the printed page. Be reasonable and don't put objects in the extremes of the frame; mechanical printing devices are not that exact and your edges will be chopped. Don't forget to delete the frame before saving or printing.
WARNING: Frames are nothing but boxes, conveniently positioned. If you move a frame by accident, the page boundary does not magically move with it. If you move a frame box, delete it and make another one to avoid confusion.
Note: Frames will appear where the actual Interpress page boundaries will be. Since the page boundaries are usually off-screen, a Frame shape may not be visible when you create it. Do a Biscrollers Reset and Biscrollers Scale (Shrink) or Fit if you want to be sure to see it.
8.5x11 Grid
A single trajectory all of whose line segments are 1/4 inches long forming two axes of a grid. Make this trajectory hot and turn on 0 and 90 degree slope lines to make a standard 1/4 inch grid. The segments alternate colors between black and gray each inch to aid measuring. The grid will initially be positioned with its corner at [0, 0]. It can be scaled, rotated, and translated to make other grids.
Text Menu
AddText
The text string in the Tioga selection is copied to the Gargoyle caret in the default font. This is NOT the only way to get text into Gargoyle; see the next two entries on filling boxes with formatted text and the section on keyboard features.
EditTiogaFill
Fully select an outline containing boxes with some formatted contents, then invoke EditTiogaFill. A new Tioga viewer will appear at the bottom right column with a copy of the formatted contents, ready for editing. If you edit, then select the entire Tioga viewer contents, then invoke FillBoxesFromSelection without having changed the Gargoyle selection, the new contents will replace the old contents. Of course, you can mess around and simply reselect the original object before invoking FillBoxesFromSelection if you wish.
FillBoxesFromSelection
The following semantics are implemented for boxes filled with Tioga nodes:
Tioga nodes (usually formatted text) can be flowed into boxes only. An outline containing boxes (ref: AddHoles) can accept Tioga nodes and will flow them sequentially into its component boxes in the reverse order that the boxes were selected when AddHoles is invoked to create the outline.
To use fill, fully select an outline containing boxes, then make a Tioga selection, then invoke FillBoxesFromSelection. The boxes will be filled with a copy of the formatted nodes in the Tioga selection (any kind of formatted node will work. e.g. text, artwork). If any box corner or edge is then translated, the nodes will reformat to fit the new box shapes. If a box is scaled or rotated as a whole object, the contents will scale and rotate along with the boxes. N.B.: if a box is transformed BEFORE being filled, the fill will adopt the transformation of the box.
Copy of fully selected outlines containing boxes copies Tioga fill. Copy of partly selected outlines containing boxes does not copy Tioga fill.
Delete of partly selected box objects causes reformat of fill nodes into remaining boxes.
UnmakeHoles of a fully selected filled object empties all but the first box in the object.
FillBoxesFromSelection with a null Tioga selection will empty the selected boxes.
The ScreenStyle setting affects the appearance of Tioga filled boxes. See documentation in the ScreenStyle menu, below.
StyleKindScreen, ShowStyleKind, StyleKindPrint
StyleKindScreen/StyleKindPrint are analogous to the StyleKind states of a Tioga viewer. Selected filled boxes will have their style kind set and reformatted as needed. ShowStyleKind shows the style kind (print or screen) of the selected filled box(es). Note that there is an important difference between Tioga and Gargoyle when creating Interpress masters: TiogaToInterpress always uses print style kind regardless of the style kind state of any Tioga viewer on the Tioga document. Gargoyle makes Interpress masters without changing the style kind of a node, so what you see on the screen is what you get in the master. The default style kind for newly filled boxes is print.
The ScreenStyle setting affects the appearance of Tioga filled boxes. See documentation in the ScreenStyle menu, below.
DropShadowOn 0.10
Gives the selected text slices a drop shadow, down and left of the original text a fractional distance 0.10 (10%) of the text string height. The color of the drop shadow is the "stroke color" of the text (e.g. the color from the Color menu, not the Fill menu).
ShowDropShadow
Print the drop shadow vector value of the currently selected text object.
DropShadowOff
Makes the drop shadow go away from the selected text objects.
DropShadowFromSelection
Gives the selected text slices a drop shadow a fractional distance of the text string height. The fraction is obtained as a signed real number from the Tioga selection. Numbers < 0.0 cause a shadow down and left to appear; numbers > 0.0 cause a shadow up and right to appear. The color of the drop shadow is the "stroke color" of the text (e.g. the color from the Color menu, not the Fill menu).
ShowDefaultLooks
Prints the default text color, drop shadow color, and drop shadow offset for text strings
MakeDefaultLooks
Sets the default text looks from the currently selected text object
AmplifySpace From Selection
Uses a real number from the Tioga selection for the amplifySpace property of selected text objects.
ShowAmplifySpace
Print the amplify space value of the currently selected text objects.
ResetAmplifySpace
Uses 1.0 for the amplifySpace property of selected text objects.
SetNewlineFactor, ShowNewlineFactor
Each Gargoyle text string object has a factor called the newline factor associated with it. SetNewlineFactor sets the newline factor of all selected text objects to the real number in the Tioga selection; ShowNewlineFactor shows the newline factor of a selected text object. Use SetNewlineFactor to change the factor and thus the interline spacing of new strings. The newline factor is a real number used to calculate the position of the origin of a new string of text when Return is typed during text entry/editing. The factor is applied to the font transformation of the string, to position the caret and open a new string for editing. For example, the default newline factor is 1.2, and the default font is Helvetica 10, unrotated. That means that a new string will start 1.2 times the font "height", or 1.2*10 = 12 points, below the string being typed when Return is typed. To get double spacing, change the newline factor to 2.4. If a string is scaled or rotated, the factor is transformed to do the right thing. The factor can be positive or negative; positive factors move downward and negative ones move upward.
To use a newline factor from an existing string, simply select the string and type BackSpace (to enter editing mode, then type Return to get to the next line.
Remember that all text input will be terminated by any mouse click.
ConvertTextToSplines
When this operation is performed, all selected text slices will be converted to outlines, one outline per character. This allows characters to be edited as Bezier segments. It also allows text to be shown with borders. Unfortunately, there is no inverse for this operation yet.
Fonts Menu
Each text string has a single font associated with it. That font may be either a "print" font or a "screen" font. For our purposes, a font is a collection of shapes, defined in some font coordinate system, together with a transformation to apply to a string of those shapes when the string is rendered.
Let us say that there are two kinds of people in the font world: users and wizards. Users are accustomed to thinking simply about fonts; i.e. fonts have a family name like Helvetica or Gacha, a size like 12 points, and a face like bold or boldItalic. They don't care much about PressFonts, TiogaFonts, XCFonts, etc. Wizards know full names of fonts, like "xerox/xc1-2-2/Modern-bold-italic" or "xerox/pressfonts/cmr55", and the fact that Helvetica10.ks is a bitmap font at size ten pixels but Helvetica-mrr is a resolution independent Helvetica font which needs more information, like a scale, to be meaningfully seen. Gee, you may already be a wizard. Read on.
Fonts are tricky. Gargoyle tries to be both powerful and easy to use, so there is a balance to be struck. Fonts are not simple when they can have arbitrary affine transformations associated with them. For example, if you ask for a text string in TimesRoman, size 10, then skew it interactively, not only is it no longer size 10 but it isn't size
anything in the simple notion of size usually associated with a font. In the Gargoyle world, text strings are like any other graphical object and can be transformed by an arbitrary affine transformation. Fonts don't just have scale factors any more; they have affine transformations associated with them. So, we have to define our fonts as entities with the following properties:
family: a family name of like-designed fonts, such as TimesRoman, Classic, OldEnglish, Modern, Hippo, . . .
face: a face can really be many things, but we recognize the usual parameters bold and italic.
transformation: an affine transformation to be applied when rendering characters from the font.
storedSize: an ugly wart; in the best of all possible worlds, all fonts would be stored the same size, but they are not. In particular, "screen" or "strike" fonts are bitmap fonts at a particular size. For example, Tioga10 is a 10 point bitmap font in the current world; there's no getting around it. A storedSize can be theoretically different from the size at which a font was designed to be displayed, that is, its designSize. For example, one could imagine a font which had to be encoded as a bitmap but was designed to look good on a billboard. The storedSize might be 20, to keep the bitmaps a reasonable size, but the designSize might be 4000.
designSize: many fonts have been designed to "look good" at a certain size or range of sizes. Font wizardry calls for taking this into account. Gargoyle now has hooks for designer fonts, but assumes that design size isn't used. Of course, Tioga10 was "designed" to look good at 10 points, so you may want to keep that in mind. Scaled bitmap fonts look lousy. Helvetica-mrr has no design size. A designSize value of 1.0 means "no special design size".
literal
font name: the fully adorned font name by which a font is known. Some examples:
xerox/pressfonts/Helvetica-bir
xerox/tiogafonts/Helvetica12BI
xerox/pressfonts/cmmib60
xerox/xc1-2-2/Modern-bold-italic
Literal font names almost always consist of two parts:
prefix: the leading substring of a literal name; the official "font prefix." For example, "xerox/pressfonts/", "xerox/tiogafonts/", "xerox/xc1-2-2/" are common prefixes. Case is insignificant.
familySizeFace: the trailing substring of a literal name; can have any format you like, but often encodes the family name, size, and face of a font. In particular, fonts with names like xerox/tiogafonts/Tioga10BI are telling you that the family is Tioga, the storedSize and the designSize are both 10, and the face is boldItalic. Unfortunately, you can have anything you want in a familySizeFace; Gargoyle will make an attempt to understand it if possible and to not throw up even if it can't understand it.
Now, aren't those just awful? You bet. We tried to invent an easier way of doing things around fonts. So, we have corresponding short names, called
user font names (i.e. supposedly good for the user!). The user names of the above fonts might be:
Helvetica-BI
Helvetica12-BI (remember, this is a bitmap font of specific size, so it is in a family by itself).
cmmib60
Modern-BI
If a user knows that the face terms Bold or Italic make sense with a particular kind of prefix and family combination, the user can use the user font name when specifying the font. For example, XC font family Modern comes in bold and italic, so the user can type Modern-B, Modern-I, Modern-BI instead of wondering what the actual naming convention for Modern is. For Tioga fonts, the user font name includes the stored size in the name, as in Tioga10 or Hippo12.
You and Gargoyle will team up to try to use the user names whenever possible, and wizards and foolish brave hearts can use literal names if they dare. In true UNIX tradition, you can poke around the directory tree that starts with /imagerfonts to try to figure out what fonts are available.
SetPressFont
The user selects a <userFontName> <scalar> pair such as "Helvetica-BI 12".
Note the format: a dash after the family name before the user face characters, then whitespace, then a size (positive REAL) in points. The <-user face characters> may be left off, denoting regular font. Gargoyle assumes FontPrefix = xerox/pressfonts/ and makes the font transformation = Scale[<scalar>]. Sample parameters that might be used with SetPressFont are:
Helvetica 12 Helvetica-BI 12 TimesRoman 23.4 Classic-I 15
If you were a Gargoyle user before we installed all this font stuff, and you want to continue in blissful non-wizardry, just use SetPressFont for all your font operations. No, you can't still select Helvetica18BI, you have to select Helvetica-BI 18.
ShowFont
The <FontPrefix><userFontName> <Transformation> <storedSize> <design size> quintuple associated with the selected text object is printed in the feedback line and the typescript.
SetXCFont
The user selects a <userFontName> <scalar> pair such as "Modern-BI 12". The <-user face characters> may be left off, denoting regular font. Gargoyle assumes FontPrefix = xerox/xc1-2-2/ and makes the font transformation = Scale[<scalar>]. Much like SetPressFonts except it uses XC fonts.
SetDetailedFont
By the term detailed, we mean a font with an explicit transformation. The user selects a <FontPrefix><userFontName> <Transformation> triple. Gargoyle assumes the designSize and the storedSize can be derived from the <FontPrefix> and <userFontName>; if not, then designSize and storedSize are defaulted to 1.0. The user must provide a factored transformation but without a translation component. For example:
xerox/pressfonts/gacha-bi [r1: REAL, s: VEC, r2: REAL]
xerox/xc1-2-2/classic-b [r1: REAL, s: VEC, r2: REAL]
xerox/tiogafonts/oldEnglish12-b [r1: REAL, s: VEC, r2: REAL]
Now, don't panic! Almost all the time you will simply be selecting one of these transformation guys that has been printed for you in the right format by Gargoyle. See ShowFont and ShowLiteralFont, below, if you are worried.
Note that we are still using our user font names here. Next up: literal font names.
ShowDefaultFont
The <FontPrefix><FontFamilyFontFace> <Transformation> <storedSize> <design size> quintuple associated with the default is printed in the feedback line and the typescript.
MakeDefaultFont
Select one text object as argument to MakeDefaultFont. The default font for text will be set to the font and transformation of the selected text object.
SetLiteralFont
The user selects a <FontPrefix><FontFamilyFontFace> <Transformation> <storedSize> <design size> quintuple. Gargoyle accepts this as literal information and trusts the user. For example:
xerox/pressfonts/gacha-bir [r1: REAL, s: VEC, r2: REAL] 1.0 1.0
xerox/xc1-2-2/modern-bold-italic [r1: REAL, s: VEC, r2: REAL] 1.0 1.0
xerox/myfonts/myFavorite55 [r1: REAL, s: VEC, r2: REAL] 5.0 1.0
xerox/myfonts/somefont/otherfonts/FunnyFont23 [r1: REAL, s: VEC, r2: REAL] 5.0 1.0
xerox/tiogafonts/oldEnglish12B [r1: REAL, s: VEC, r2: REAL] 12.0 12.0
SetLiteralFont is really intended for wizards; use with discretion.
ShowLiteralFont
The <FontPrefix><FontFamilyFontFace> <Transformation> <storedSize> <design size> quintuple associated with the selected text object is printed in the feedback line and the typescript. ShowLiteralFont is really intended for wizards; use with discretion.
SetScreenFont
The user selects a <userFontName> <scalar> pair such as "Tioga10 20" or "CMR 12". Gargoyle derives a storedSize from the <userFontName>. Gargoyle assumes FontPrefix = xerox/tiogafonts/ and makes the font transformation = Scale[<scalar>]. If the font is one of the traditional TiogaFonts (e.g. Helvetica, TimesRoman, Tioga, ...) the font machinery will attempt to find the corresponding strike font. For example, SetScreenFont with "TimesRoman9-BI 9.0" selected will find the font in file ///fonts/xerox/tiogafonts/TimesRoman9BI.ks. If the user requests a TiogaFont not in the Tioga font set (often an unusual size requested), Gargoyle will fail to change the font. Note that this becomes the primary font, not the extra visible font which may be associated with text. You can now mix "print" and "screen" fonts on a page.
CopyFontAndTransform
Select some number n of text objects. Extend the selection to a final text object, number n+1. The first n objects will acquire all the font values from object n+1, including scaling and rotation but not position. The transformation will change. This is like CopyFormat in Tioga.
CopyFamilyAndFace
Select some number n of text objects. Extend the selection to a final text object, number n+1. The first n objects will acquire the <FontPrefix><FontFamilyFontFace> from object n+1. The transformation will not change. This is like CopyLooks in Tioga.
MatchLiteral
Select one Gargoyle text object as argument to MatchLiteral. Gargoyle will then select all text objects that literally match the orginal, including <FontPrefix><FontFamilyFontFace> <Transformation> <storedSize> <design size> (except for the translation component of Transformation). This is like a Tioga Edit Tool "Find" operation while matching "Format".
MatchName
The Tioga selection is used as substring argument to MatchName. Any text object whose user name contains that substring will be selected. For example, selecting Gacha will match all Gacha strings regardless of face. Selecting Gacha-I will limit the selection to italic Gachas.
MatchNameLiteral
The Tioga selection is used as substring argument to MatchNameLiteral. Any text object whose literal name contains that substring will be selected. For example, selecting Cream-bold will match xc1 style Cream-bold but not PressFont style Cream. Dubious utility.
Groups Menu
Clusters are a general clustering mechanism that does not require naming. Any slice can be a member of one cluster at a time. Clusters are slices, so there can be clusters of clusters of clusters ... to any desired hierarchical level. Clusters can be quickly made and unmade. Clustering does not affect the ability of its members to be edited or to trigger alignment objects, unless the cluster is frozen. Frozen clusters are NYI.
Groups are a rudimentary clustering mechanism based on the idea of a named collection of objects called a group. All slices may belong to groups. Groups are identified by name; case is not specific (i.e. FirstGroup and firstgroup name the same group). Groups survive across Saves/Gets by appearing in the Gargoyle files. A slice may be a member of any number of groups simultaneously.
Cluster, ClusterAndFreeze, UnCluster
Cluster creates a new top level cluster slice and adds all selected (top level) objects to that slice. Those objects become children of the cluster and are no longer top level objects themselves. UnCluster takes a top level selection of clusters and undoes one level of clustering, making all the first level children of the cluster top level, and deleting the cluster. ClusterAndFreeze is a shorthand for Cluster followed by FreezeCluster. Intermediate levels in a cluster cannot be selected directly, because they are neither topLevel nor trajectory (leaf) levels, but somewhere in between. See the Select menu documentation below for instruction on walking the selection through a cluster hierarchy.
FreezeCluster, ShowFrozen, ThawCluster
NYI.
AddToGroup
Adds the currently selected objects to the group named in the Tioga selection.
ShowGroupsOfSelected
Prints all the group names of all the currently selected objects. With many groups, the user should open a typescript to see them all.
RemoveFromGroup
Removes all currently selected objects from the group named in the Tioga selection.
MatchGroup
Selects all objects in the group named in the Tioga selection.
ShowAllGroups
Prints all the group names in the entire scene. With many groups, the user should open a typescript to see them all.
EdgeFit Menu
Edge fit operations are currently NLI. They may be restored in future.
EdgeFit is the interface to a body of curve-fitting software written by Michael Plass and Maureen Stone. The curve-fitting programs (Fit and PiecewiseFit) take a sequence of sample points and fit a polygon or a piecewise cubic curve to them. The curve-fitting software is independent of the source of the sample points. For Gargoyle, the sample points are generated by finding the points lying along a dark/light edge in a sampled image. This image is generated by rendering all the objects that lie in the bounding box of the current selection into an 8 bit/pixel pixel array, and applying some simple edge finding software to the resulting image. To fit a scanned image, for example, you need to make the image into an Interpress slice, select the slice and invoke CurveFit or LineFit.
EdgeFit can also be used to find the combined outline of an overlapping set of Gargoyle objects. Make all the objects the same color (black works best), and select them, making sure no other objects lie in the bounding box of the selected objects. The larger the object the better the fit. To fit characters with a small number of curves, blow them up to 600-800 points height before fitting.
There are currently 6 parameters available to the user to control EdgeFit: threshold, minDistance, polypenalty, angle, tolerance and iterations. Threshold and minDistance apply to the edge finding step. Polypenalty applies to the polygon finder, which is also an intermediate step in the curve finding algorithm. Tolerance, Angle and Iterations apply to the curve-fitting routine. Each of these parameters is described in detail below.
While the most obvious application of EdgeFit is to fit curves to scanned images, be aware that the edge finding code is totally unable to discriminate between edges that are interesting data and edges of the same darkness that are noise. Therefore, the results are often less than satisfactory. As the use of EdgeFit evolves, we hope to be able to provide more specific information about how to condition your scanned image so that EdgeFit will be successful. Note also that EdgeFit is precisely named; if your scanned image is a line drawing, EdgeFit will fit both edges, not the center, of the lines. We do not currently have any code that will find the centerline of a scanned line.
FitCurves
Take the bounding box of the current selection, render all objects in that box into an 8 bit/pixel pixel array, find the edges, and fit piecewise cubic curves to the edges. Straight lines will be approximated with flat cubics. This is an expensive operation, with the cost proportional to the number of sample points in the edge. It is very much worthwhile to keep your selection as small and the MinDistance parameter as large as possible. LeftShift Swat (with the cursor in the action area) will abort this operation within a few seconds.
ShowParameters
Show the 6 fitting parameters. Below are the default values.
Fit: threshold: 0.5 minDistance: 0.75 polyPenalty: 0.75 tolerance: 2.0 angle: 45.0 iterations: 5
FitLines
Take the bounding box of the current selection, render all objects in that box into an 8 bit/pixel pixel array, find the edges, and fit a polygon to it. This is an expensive operation (though cheaper than curve-fitting), with the cost proportional to the number of sample points in the edge. It is very much worthwhile to keep your selection as small and the MinDistance parameter as large as possible. LeftShift Swat (with the cursor in the action area) will abort this operation within a few seconds.
SetParameters
Set the 6 fitting parameters using the following format:
Fit: threshold: 0.5 minDistance: 0.75 polyPenalty: 0.75 tolerance: 2.0 angle: 45.0 iterations: 5
Select this entire line, including Fit:, with the new parameters and invoke SetParameters.
SetThreshold
Takes a real number in the Tioga selection in the open range 0.0 (black) to 1.0 (white). This value is used to define a black/white transition for the edge finder. For scanned images, 0 and 1 correspond to pixel values 0 and 255. A threshold value of 0.5, for example, will find the edge 127 and 128. Assuming a dark shape on a light background, if the edges found are too far inside what you perceive as the edge, set the threshold value higher (towards white), and vis versa. Do not set the threshold to exactly 1.0 or exactly 0.0.
SetMinDistance
Takes a small real number (in pixels) in the Tioga selection. As the sample points along the edge are generated, no new point is added to the list if it is inside the distance specified. This number is used to reduce the number of samples, which improves performance, at the risk of missing a sample that indicates an important feature. The default value is less than 1.0, but higher values would be appropriate for shapes that are smooth with no important corners.
SetPolyPenalty
This parameter controls the tightness of the polygon fitting routine. A smaller value of the parameter will make a polygon with more vertices (tighter fit). The default value for this parameter is 0.75. A change of 0.25 will make a noticeable difference. Takes a small real number in the Tioga selection.
This routine is also used as part of the curve-fitting algorithm. The vertices of the polygon are the places that the algorithm tests as potential joints between cubic segments. Not every potential joint will become an actual joint, but no point that is not a potential joint can become a joint. Having fewer potential joints makes the curve-fitting run faster at the risk of producing a bad fit.
SetAngle
Once a set of potential joints are selected, the Angle parameter is used to determine whether the potential joint should have tangent continuity (be smooth) or not. If the change in direction from one polygon edge to the next is less than the specified angle, tangent continuity will be maintained. Takes an angle in degrees in the Tioga selection.
SetIterations
This parameter defines the maximum number of iterations performed in the inner loop of the curve-fitting algorithm. As the outer loop of the algorithm tries to find the joints from the set of potential joints, it tests different combinations of joints. If the maximum iteration parameter is small, these tests will be faster, at the risk of missing a an arrangement that would work if only the loop ran longer. The effect is that the algorithm may produce two cubic pieces where one would do. Values in the range of 5-10 seem reasonable. Takes an integer value in the Tioga selection.
SetTolerance
The curve-fitting algorithm, when successful, will produce curves that do not deviate from the sampled data by more than the value of tolerance (in pixels). This means that if you set the tolerance to 1.0, you should never see any white gap between the curve and the sampled edge. The larger the tolerance the looser, faster and more smooth the fit. In many cases you may find that it is better to fit the curve loosely and edit the result than to ask EdgeFit for a tight fit. Takes a small real number in the Tioga selection.
If the set of potential joints is inadequate, or if the tangent values selected to maintain continuity are bad, the curve-fitting algorithm may fail to produce a curve that fits within the tolerance. If this happens, changing the angle (make is smaller) and/or polypenalty (make it smaller) should help produce a better set of potential knots and tangents.
Debug Menu
Not a user-oriented menu. Help for Gargoyle implementors.
Link Button
Make a selection in any Gargoyle action area on the screen and click this button. The control panel will become linked to that action area. This allows providing a control panel to areas that don't normally have one, such as the search and replace panes of the MatchTool.
Palette Button
When the GGActive command has been given in a CommandTool and both the Active and Palette buttons are turned on, the objects in the corresponding Gargoyle scene will act as color palette objects. That scene will never take the input focus. Instead, pressing any mouse button over an object will pop-up a menu which will transfer either the stroke color, fill color, or both of the object to the selected Gargoyle objects in the Gargoyle scene that has the input focus.
Steve Wallgren has put together a set of Gargoyle files containing color patches that sample the Cyan-Magenta-Yellow color cube at 10% increments along all three axes. Each file allows cyan and magenta to vary while holding the value of yellow fixed. These files are:
[CedarCommon]<FamousFiles>ProcessGuide-Y000.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y010.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y020.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y030.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y040.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y050.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y060.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y070.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y080.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y090.gargoyle
[CedarCommon]<FamousFiles>ProcessGuide-Y100.gargoyle
Stroke Menu
These operations set the stroke parameters of currently selected segments. Stroke parameters are width, end type, joint type, and optional dash pattern. Default values for stroke parameters may be set via this menu.
WidthFromSelection
Sets the stroke width of all selected slices to the number of points in the Tioga selection. The Tioga selection should be a positive real number.
ShowValues
Prints the stroke width in points, the end type, the joint type, and the dash pattern of the selected slice segment(s).
MatchSelectedWidth
Selects all slice segments whose width matches the width in the Tioga selection. The Tioga selection should be a positive real number.
0 pt, 1 pt
Sets the line width of all selected slices to the given number of points. LOOK 0 through LOOK 9 are available from the keyboard to set stroke widths correspondingly. Slices of stroke width zero will normally disappear, but will be highlighted if selected. The R9 key on a SPARCstation right-hand keypad is the LOOK key. Hold down R9 while typing a digit in the QWERTY digit row to get the desired stroke width.
EndFromSelection
Sets the stroke end of all selected slices to the end type in the Tioga selection. The Tioga selection should contain "round", "square", or "butt" (no quotes in the selection).
DashesFromSelection
Creates dashed stokes for the selected slice segments from a dash specification in the Tioga selection. A dash specification is defined precisely in the Interpress Electronic Printing Standard, Section 4.8.3. The format for a simple dash specification is: [a: LIST OF REAL] c: REAL d: REAL, where
a => cyclic list of "on" values followed by "off" values which define the dash pattern "steps"
c => "steps" offset at start of dash pattern
d => total number of "steps" per segment.
If the dashed strokes have round ends, their "on" segments are drawn with round ends. It is therefore possible to get a "dotted line" effect by making the on values in the SET OF REAL= 0.0. If d <=0, the total number of steps is calculated automatically from the length of the segment. Some examples follow, see the Interpress Electronic Printing Standard, Section 4.8.3 for the whole truth.
Dash Pattern = > Dashed Lines
[Artwork node; type 'Artwork on' to command tool]
MatchSelectedDashes
Selects all slice segments whose dashes exactly match the dash pattern in the Tioga selection.
DashesOff
Removes dashing from the selected slice segments.
JointFromSelection
Sets the stroke joint of all selected trajectories to the joint type in the Tioga selection. The Tioga selection should contain "round", "miter", or "bevel" (no quotes in the selection).
ShowDefaults
The current default stroke width, stroke joint, stroke end, and dash pattern values are printed in the feedback line and the typescript.
Notice that there is no way to set the default other than by selecting an object which already posses the desired values and using MakeDefaults.
MakeDefaults
Select one slice segment as argument to MakeDefaults. The default stroke width, stroke end, stroke joint, and dash pattern values will be set from the values of the selected segment. Subsequent creation of new objects will use the defaults.
Copy
Select the segments to be the destination of the stroke copy. Select last the segment that is to supply the stroke parameters. Invoke Copy. All selected segments will now have the same stroke parameters (width, end, joint, dash pattern).
Color Menu
These operations set the color of selected slice segments. Some of them require that the ColorTool be in the Cedar loadstate.
None, Black, White, Gray
Sets the color of all selected slice segments to the given color. Black here is "process black" meaning that printers with black ink will use that instead of mixing cyan, magenta, and yellow.
FromColorTool
Sets the color of all selected slice segments to the color displayed by the ColorTool.
HueFromColorTool
Changes the hue of the selected slice segments to the hue of the color displayed by the ColorTool. The saturation and value (in the Hue-Saturation-Value or HSV color space) of these colors is unchanged. This operation only works on constant colors (not sampled colors, like a picture of the Mona Lisa).
ShowStrokeColor
Prints the color of the current selected slice segment as an RGB triple and a color name in the feedback line. If the color is a black, it says whether it is a process black or a CMY black.
ToColorTool
Sets the ColorTool color to be the color of the first selected slice segment.
FollowColorTool
FollowColorTool is currently NLI. It may be restored in future.
Sets the color of all selected slice segments to the color displayed by the ColorTool, and follows that color as the ColorTool manipulates the color. Any mouse click terminates FollowColorTool. The ColorTool may be on the LF display.
FromSelectedName
Sets the color of all selected slice segments to the color in the current Tioga selection as interpreted by the Color Naming System (CNS). A CNS name consists of up to three descriptive terms: Saturation, Lightness, and Hue (.e.g. vivid dark green).
FromSelectedRGB
Sets the stroke color of all selected segments to the color in the current Tioga selection interpreted as a triple of intensity values in red, green, and blue. Value range is [0.0..1.0]. The format of the selection matches the format of a color when ShowStrokeColor is invoked; for example:
0.5 0.5 0.5 encodes a 50% gray
0.9 0.9 0.1 encodes a strong yellow
0.0 0.0 0.0 encodes a non-process (CMY) black.
FromSelectedCMYK
Sets the stroke color of all selected segments to the color in the current Tioga selection interpreted as a quadruple of intensity values in cyan, magenta, yellow, black. Value range is [0.0..1.0]. This gives the user a way to specify exactly how much of each type of toner a printer will use when the picture is printed.
0.0 0.0 0.0 0.5 encodes a 50% gray
1.0 0.0 0.0 0.0 encodes a bright cyan
0.0 0.0 0.0 1.0 encodes a process black.
FromSelectedIntensity
Sets the stroke color of all selected segments to a shade of gray whose intensity is given as a single real number in the current Tioga selection. Value range is [0.0..1.0].
MatchSelectedName, MatchSelectedRGB
Select all slice segments whose stroke color is the selected CNS name or RGB triple respectively.
ShowDefault
The current default stroke color is printed in the feedback line and the typescript.
Notice that there is no way to set the default other than by selecting an object which already posses the desired color and using MakeDefault.
MakeDefault
Select one slice segment as argument to MakeDefault. The default stroke color will be set from the stroke color of the selected slice segment. Subsequent creation of new objects will use the default.
Copy
Select the segments to be colored. Select last the segment that is to supply the color. Invoke Copy. All selected segments will now have the same stroke color.
Fill Menu
These operations fill all the currently selected closed slices. Some of them require that the ColorTool be in the Cedar loadstate.
None, Black, White, Gray
Sets the fill color of all selected closed slices to the given color. Black here is "process black" meaning that printers with black ink will use that instead of mixing cyan, magenta, and yellow.
FromColorTool
Sets the fill color of all selected closed slices to the color displayed by the ColorTool.
HueFromColorTool
Changes the hue of the fill color of all selected closed slices to the hue of the color displayed by the ColorTool. The saturation and value (in the Hue-Saturation-Value or HSV color space) of these colors is unchanged. This operation only works on constant colors (not sampled colors, like a picture of the Mona Lisa).
ShowFillColor
Prints the color of the current selection as an RGB triple and a color name in the feedback line. If the color is a black, it says whether it is a process black or a CMY black.
ToColorTool
Sets the ColorTool color to be the color of the first selected closed slice.
FollowColorTool
FollowColorTool is currently NLI. It may be restored in future.
Sets the fill color of all selected closed slices to the color displayed by the ColorTool, and follow that color as the ColorTool manipulates the color. Any mouse click terminates FollowColorTool. The ColorTool may be on the LF display.
FromSelectedName
Sets the fill color of all selected closed slices to the color in the current Tioga selection as interpreted by the Color Naming System (CNS). A CNS name consists of up to three descriptive terms: Saturation, Lightness, and Hue (.e.g. vivid dark green).
FromSelectedRGB
Sets the fill color of all selected closed slices to the color in the current Tioga selection interpreted as a triple of intensity values in red, green, and blue. Value range is [0.0..1.0]. The format of the selection matches the format of a color when ShowFillColor is invoked; for example:
0.5 0.5 0.5 encodes a 50% gray
0.9 0.9 0.1 encodes a strong yellow
0.0 0.0 0.0 encodes a non-process (CMY) black.
FromSelectedCMYK
Sets the fill color of all selected closed slices to the color in the current Tioga selection interpreted as a triple of intensity values in cyan, magenta, yellow, black. Value range is [0.0..1.0]. This gives the user a way to specify exactly how much of each type of toner a printer will use when the picture is printed.
0.0 0.0 0.0 0.5 encodes a 50% gray
1.0 0.0 0.0 0.0 encodes a bright cyan
0.0 0.0 0.0 1.0 encodes a process black.
FromSelectedIntensity
Sets the fill color of all selected closed slices to a shade of gray whose intensity is given as a single real number in the current Tioga selection. Value range is [0.0..1.0].
MatchSelectedName, MatchSelectedRGB
Select all objects whose fill color is the selected CNS name or RGB triple respectively.
ShowDefault
The current default fill color is printed in the feedback line and the typescript.
Notice that there is no way to set the default other than by selecting an object which already posses the desired color and using MakeDefault.
MakeDefault
Select one closed slice as argument to MakeDefault. The default fill color will be set from the fill color of the selected slice. Subsequent creation of new objects will use the default.
Copy
Fill color is copied from the last selected object to all other selected objects. When color washes are copied, the new object receives that portion of the wash that is under it, where we think of a wash as a sheet of "wallpaper" part of which is visible in the source (last-selected) object. Thus, moving the objects that are to be colored or moving the source object will affect the outcome of this operation.
Fine point: Open objects retain a fill color, usually the last fill color they had before they were opened or the default fill color if they were created open and never closed.
WashToWhite, WashToColorTool, WashToBlack
Select some slices that have a constant fill color. WashToWhite will replace the fill with a color wash from the original color to white (moving left to right), filling the bounding box of the slice. WashToBlack will replace the fill with a color wash from the original color to black. WashToColorTool will replace the fill with a color wash from the original color to the color in the ColorTool.
The resulting wash may be copied to any other object. Washes tile the plane, so if you grab one point of a washed object and drag it, you will see that the wash pattern is repeated over and over (like wallpaper). When a wash is copied, the phase of the wash on the target object will be set to match the phase of the wash on the source object. For example, if the target object is on top of the source object when the copying occurs, each point of the target object will have the same color as the point directly below it on the source object.
Edit Menu
Add CP
Place the caret on a segment of a curve type which has control points. Invoke Add CP. A new control point will appear at the caret and the curve will be adjusted accordingly.
Describe Selected
A human sensible description of the selected object is printed in the feedback line and typescript.
Delete CP
Select a control point. Invoke Delete CP. The control point will disappear and the curve will be adjusted accordingly. You cannot delete a CP by selecting it and hitting the Delete key.
MakeHoles
First select a set of closed slices to become holes (they may have holes). Finally select a closed slices to which the holes should be added. It can already have holes. Open the menu and invoke MakeHoles. The last slice will now have as holes all of the rest of the slices (in addition to the holes it already had). Outlines with holes are drawn using wrap rules, which may be set to OddWrap or NonZeroWrap which may affect the appearance of holed objects. Nothing horrible happens if the holes are not completely contained in the outline. N.B.: nothing keeps holes within an outline. If the outline is top level, top level selection (DoubleLeft click) will select an outline and all of its holes if you want to see where they are.
Weld
Select two open trajectories. Invoke Weld. The second one selected will be dragged to the nearest end point of the first one selected. They will become a single trajectory. A trajectory may be welded closed to itself if its endpoints are coincident.
UnmakeHoles
First select a set of closed composite outlines (e.g. with holes). Each outline will be exploded and replaced by its constituent parts.
SetOddWrap
Set the wrap rule for rendering all selected outlines to be odd wrap. Odd wrap means that a point will be considered "inside" a filled area if its wrap number is odd. Loosely speaking, the wrap number is the number of times an outline surrounds a point. See the Interpress documentation for more on wrap rules.
ShowWrapRule
Select some outline(s) and invoke ShowWrapRule. The wrap rule (odd or non-zero) for the selected outline(s) will be printed.
SetNonZeroWrap
Set the wrap rule for rendering all selected outlines to be non-zero wrap. Non-zero wrap means that a point will be considered "inside" a filled area if its wrap number is not zero. Loosely speaking, the wrap number is the number of times an outline surrounds a point. See the Interpress documentation for more on wrap rules.
OrientCW
Set the orientation for all selected slices to be clockwise. Loosely speaking, the orientation is the direction in which a particular object is traversed and its parts (e.g. joints, segments) are named. Orientation may be important for such matters as disambiguation of selections, matching with polarity important during graphical search, and rendering using Imager wrap rules. See the Interpress documentation for more on orientation.
ShowOrientation
Select exactly some slice(s) and invoke ShowOrientation. The orientation (cw or ccw) for the selected slice(s) will be printed.
OrientCCW
Set the orientation for all selected slices to be counterclockwise. Loosely speaking, the orientation is the direction in which a particular object is traversed and its parts (e.g. joints, segments) are named. Orientation may be important for such matters as disambiguation of selections, matching with polarity important during graphical search, and rendering using Imager wrap rules. See the Interpress documentation for more on orientation.
AddJoint
Place the caret on a segment. Invoke AddJoint. A new joint will appear at the caret and the curve redefined with an additional segment.
Reorient
Change the orientation for all selected slices to be opposite from their current orientation. Loosely speaking, the orientation is the direction in which a particular object is traversed and its parts (e.g. joints, segments) are named. Orientation may be important for such matters as disambiguation of selections, matching with polarity important during graphical search, and rendering using Imager wrap rules. See the Interpress documentation for more on orientation.
Combine
Combine is currently NLI. It may be restored in future.
Operates on all selected objects that are closed, selected in full, and are made entirely of straight line segments (includes boxes). Creates a new, composite object by Boolean OR of the set of all points enclosed within the operand objects. The new object will appear on top of the set of operand objects, and will be selected so that immediately moving the new object is easy. The new object has stroke width = 0.0 and inherits either the fill color of the last selected operand object or, if that object is unfilled, the default fill color.
This feature uses the GeometricLogicOps package by Dan Greene.
ApplyAllDefaults
Applies the current default stroke values (width, end, joint, dash pattern, color) and default fill color to all selected objects. Does not apply the current default font to selected text strings, but does apply the current default fill color to selected text strings.
ShowAllDefaults
Prints the current default font, default stroke color, default fill color, and default stroke values (width, end, joint, dash pattern) in the feedback line and typescript.
StandardDefaults
Sets defaults:
Default Stroke Color: R: 0.000 G: 0.000 B: 0.000 CNS: Black (process black)
Default Fill Color: R: 0.500 G: 0.500 B: 0.500 CNS: Light Grey
Default Stroke Values: Width: 2.0 End: round Joint: round Dashes: Not Dashed
Delete
Delete the currently selected objects. Also available via the Delete key.
HistoryTool
Create (iconic) a History tool for this editing session. See the section below on the Gargoyle History Tool.
Undelete
has been retired and replaced by Undo.
Close, ReplaceSegment, and Splice
have been retired. To add a straight line segment that closes a trajectory, select an endpoint of the trajectory and hit carriage return. To close a trajectory whose endpoints are already coincident, select the entire trajectory and hit Control-W (weld).
Select Menu
These operations change the current selection. Object "A" is said to be within Object "B" when Object A's bounding box is completely contained in the bounding box of Object B.
CycleSelection/UnCycleSelection
Cycle through ambiguous selections in the forward/backward direction.
SelectAll/DeselectAll
Selects/Deselects every object in the scene.
SelectForward
Walk the selection towards the front of a hierarchy. If the selection is top level, moves the selection to the next forward top level object in the scene. If the selection is not top level (i.e., within a cluster hierarchy), move the selection to the next forward sibling of the selected object. If the selection is already at the frontmost object in the hierarchy, complains and does not change the selection.
SelectBackward
Walk the selection towards the back of a hierarchy. If the selection is top level, moves the selection to the next backward top level object in the scene. If the selection is not top level (i.e., within a cluster hierarchy), move the selection to the next backward sibling of the selected object. If the selection is already at the backmost object in the hierarchy, complains and does not change the selection.
Grow
Grow the selection to the next level up in a hierarchy. If the selection is already at the top of a hierarchy, complains and does not change the selection.
ShrinkForward
Walk the selection down and to the frontmost child in a hierarchy. If the selection cannot be shrunk forward, complains and does not change the selection.
ShrinkBackward
Walk the selection down and to the backmost child in a hierarchy. If the selection cannot be shrunk backward, complains and does not change the selection.
Coincident
Selects all segments whose two endpoints are coincident. Useful for finding point size objects.
UnSeeableSegs
A segment is unseeable if no transformation will make it visible. In practice, a segment is unseeable if it has zero stroke width or no color (color=none). Selects all unseeable segments.
UnSeeableObj
Selects most complete objects that are unseeable. A segment is unseeable if it has zero stroke width or no color (color=none). An object is unseeable if it is whitespace-only text, if all of its segments are unseeable and it is an open object, if all of its segments are unseeable and it is a closed but unfilled object, or if all of its segments are unseeable and colinear. Objects will not be selected if they have unseeable segments and zero area but do not have colinear endpoints.
New, NewWithDelete, Extend
New, NewWithDelete, Extend have all been retired
HotSpots Menu
Hot objects trigger alignment lines. Users explicitly make objects hot and cold (not hot) using these commands. This menu also includes Anchor commands. The anchor is always considered a hot point.
MakeHot, MakeAllHot, MakeCold, MakeAllCold
Makes (respectively) the current selections hot, every object hot, the current selection cold, all objects cold. You will quickly find yourself using the keyboard accelerators for these commands (CtrlS for MakeHot and CtrlShiftS for MakeCold; CtrlDoubleS for MakeAllHot and CtrlShiftDoubleS for MakeAllCold).
DropAnchor, LiftAnchor
Drop Anchor, Lift Anchor. Drop Anchor puts the Anchor at the current caret position (same as CtrlA). Lift Anchor removes the anchor from the scene altogether (same as CtrlShiftA).
StandardAlignments
Standard Alignments replaces the current alignment menus with the default or standard ones that come with a fresh Gargoyle viewer.
Units Menu
All of the dimensionless fractions (1/18, 1/4, 0.5, etc.) on the Radius: alignment menu (see below) and the distances on the LineDist: alignment menu initially have a scale factor of inches. The scale factor may be changed via the Units menu. The values in the Radius: and LineDist: fields (see the last line of buttons on the control panel) are also in terms of the current scale factor.
Inches
Inches sets 1 unit = 1 inch.
ShowValue
Displays the current scale factor in points, inches, and centimeters in the feedback line.
Points
Points sets 1 unit = 1 "point" (1/72 inch).
FromSegment
The length of a segment in the scene can be used to change the scale factor. Select a segment, then invoke FromSegment, and length 1 will be normalized to the length of this segment. Useful for constructing midpoints and for editing shapes which have been scaled since they were made.
FromRadiusValue
The value in the Radius: field can be used to change the scale factor. Invoke FromRadiusValue and the new scale factor will be the Radius: field value multiplied by the current scale factor.
FromSelection
The scale factor in inches can be set directly from the Tioga selection interpreted as a positive real.
Centimeters
Centimeters sets 1 unit = 1 centimeter.
ShowColors
ShowColors has been retired. Color displays now work interactively. Enjoy!
ScreenStyle Menu
SpecifiedFonts, AlternateFonts, WYSIWYG
A set of schemes for deciding how to paint the screen. The ScreenStyle button cycles through the three choices (left click to cycle forward, middle or right click to cycle backward). SpecifiedFonts causes use of assigned fonts and font metrics to display text. AlternateFonts causes display of possibly more readable text using what are called alternate fonts, but the hit testing and other bounding box operations still use the assigned font metrics. WYSIWYG causes the display to mimic an Interpress master; no control points or selections are shown and specified fonts are used for display.
ScreenStyle affects the display of both Gargoyle text strings and of boxes filled with Tioga text. When ScreenStyle is SpecifiedFonts, strings and filled boxes are displayed in their true, user-assigned fonts (in the case of Gargoyle text objects) and in their true, user-assigned style (in the case of Tioga filled boxes). When ScreenStyle is AlternateFonts, Gargoyle text strings will be displayed in system-assigned alternate fonts and Tioga filled boxes will be displayed in Tioga screen style.
In brief, when ScreenStyle is AlternateFonts the display should be readable; when ScreenStyle is SpecifiedFonts or WYSIWYG the display will mimic hardcopy for text and filled boxes.
Buffer Button
When Buffer is turned on (video-reversed), Gargoyle uses buffering to frequently refresh the screen and give the appearance of smooth motion. When Buffer is turned off, Gargoyle paints directly on screen so that the user can see exactly how the screen image is built. During interactive transformations with Buffer off the screen image will appear to flash. The initial building of an image after a Get operation will not use buffering.
GravType (Gravity Choice) Menu
PreferLines, PreferPoints
A set of schemes for deciding which, of the objects that are close to the cursor, should be snapped to. PreferLines simply chooses the closest object. PreferPoints prefers to map to points rather than lines if the points are sufficiently close. The GravType button toggles between PreferLines and PreferPoints.
GravExtent (Gravity Extent) Button
GravExtent is a simple button. Clicking it will cause the current value of the gravity extent to be printed on the feedback line. Next to it is a special button called a graphics button. Its display is a graduated slider showing the current gravity extent value in units of points (1/72 of an inch). Clicking it Left-Clicking in this small window halves the gravity extent. Right-Clicking doubles the gravity extent. Middle-Clicking resets the gravity extent to its default value (currently 25 points). The picture in the window is of a caret placed <gravity extent> units from the left edge of the window.
Gravity Toggle Button
Clicking this button toggles gravity on and off. The button is video reversed when Gravity is on. Gravity toggling can also be invoked interactively with CtrlSPACE, ShiftSPACE, or CtrlShiftSPACE while in the midst of other interactive operations.
Midpts Toggle Button
When Midpts is on (video-reversed) the midpoints of all segments will be gravity-active. When the caret has snapped to a midpoint, the message "Caret on midpoint of segment ..." will appear in the typescript or message window.
Auto Toggle Button
When Auto is on (video-reversed), Gargoyle will attempt to be smart about generating alignment objects automatically. When Auto is off, only the Anchor and hot objects will generate alignment lines.
Alignments Toggle Button
Clicking this button toggles alignments on and off. The button is video reversed when Alignments are on. When Alignments are off, no alignment lines will be generated or displayed. The state of the alignment menus is unaffected by toggling Alignments.
Alignment Menus: Activating and Deactivating Alignments
Slope Menu
Clicking any of the buttons 150 135 ... 30 0 (or buttons added by the user) will make that button turn bold and will activate that slope. All hot vertices will now trigger alignment lines of the specified slope. Clicking again deactivates a particular slope. Any number of slopes may be active simultaneously. Clicking the word "Slope:" at the beginning of the line deactivates all slope alignment lines.
Angle Menu
Clicking any of the buttons 90 60 ... -90 (or buttons added by the user) will make that button turn bold and will activate that angle. All hot segments will now trigger alignment lines at the specified angle to themselves, not to the horizontal. Clicking again deactivates a particular angle. Any number of angles may be active simultaneously. Clicking the word "Angle:" at the beginning of the line deactivates all angle alignment lines.
Radius Menu
Clicking any of the buttons 1/18 1/9 ... 1 2 4 (or buttons added by the user) will make that button turn bold and will activate that radius. All hot vertices will now trigger alignment circles of the specified radius. Clicking again deactivates a particular radius. Any number of radii may be active simultaneously. Clicking the word "Radius:" at the beginning of the line deactivates all alignment circles.
LineDist Menu
Clicking the button 0 (or buttons added by the user) will make that button turn bold and will activate that distance line. All hot segments will now trigger two alignment lines parallel to the hot segment at the specifed distance from the segment. Clicking again deactivates a particular distance. Any number of distance lines may be active simultaneously. Clicking the word "LineDist:" at the beginning of the line deactivates all parallel alignment lines.
Turning All Alignments Off
CtrlQ toggles alignments. It is equivalent to clicking the Alignments menu button. CtrlShiftQ turns all alignment menu items off. It is equivalent to clicking "Slope:", "Angle:", "Radius:", and "LineDist:" in succession.
Alignment Menus: Adding and Deleting Your Own Alignment Objects
Slope Menu
Select a slope value (in degrees in the range [0..180) in a Tioga viewer (typing it next to Slope: on the "Measure" line is OK). Click the "←" button to the left of Slope: on the "Measure" line of the control panel. Your special slope will be added to the list and activated. Alternatively, if you are interested in the slope of an existing line segment, you can select that segment and click Get! on the Slope: menu line. The slope of the selected segment will be added to the list and made active.
Any item on any of the lists can be deleted by activating it and clicking Delete! on the associated line.
Angle Menu
Select an angle value (in degrees in the range (-180..180] ) in a Tioga viewer (typing it next to Angle: on the "Measure" line is OK). Click the "←" button to the left of Angle: on the "Measure" line of the control panel. Your special angle will be added to the list and activated. Alternatively, if you are interested in the angle between adjacent lines in a trajectory, you can select adjacent segments in that trajectory (or the entire trajectory) and click Get! on the Angle: menu line. The angle(s) between selected adjacent lines in the trajectory will be added to the list and made active.
Any item on any of the lists can be deleted by activating it and clicking Delete! on the associated line.
Radius Menu
Select a radius value (in "units", a real number) in a Tioga viewer (typing it next to Radius: on the "Measure" line is OK). Click the "←" button to the left of Radius: on the "Measure" line of the control panel. Your special radius will be added to the list and activated. Alternatively, if you are interested in the length of an existing line segment to use as a radius, you can select that segment and click Get! on the Radius: menu line. The length of the selected segment will be added to the list and made active.
Any item on any of the lists can be deleted by activating it and clicking Delete! on the associated line.
LineDist Menu
Select a distance value (in "units", a real number) in a Tioga viewer (typing it next to LineDist: on the "Measure" line is OK). Click the "←" button to the left of LineDist: on the "Measure" line of the control panel. Your special distance will be added to the list and activated. Alternatively, if you are interested in the length of an existing line segment, you can select that segment and click Get! on the LineDist: menu line. The length of the selected segment will be added to the list and made active.
Any item on any of the lists can be deleted by activating it and clicking the Delete! on the associated line.
Alignments and Measuring
At the beginning of every command which moves the caret, the initial position of the caret is recorded by Gargoyle, and the previous initial position is remembered as well. Gargoyle then follows the moving caret and records the final position as well. Call the "previous" initial position A and the "current" initial position B. Call the "final" position of the caret C. At the end of the caret motion, the distance between B and C is posted in the Radius: text viewer. The slope of the line BC is posted in the Slope: text viewer. The angle ABC between the two line segments AB and BC is posted in the Angle: text viewer. The perpendicular distance between the line AB and the point C is posted in the LineDist: text viewer. Slopes and angles are measured counterclockwise. Slopes are converted to the range [0..360); angles are converted to the range (-180..180].
Feedback Line
One line at the bottom of the control panel has been reserved for short messages to the user. These are particularly handy while dragging or place the caret when a description of the object to which the caret is snapping appears in this region.
Keyboard Features
The following summarizes keyboard actions. These may be augmented or altered in future as Gargoyle evolves.
Unless a LOOK (R9) or Control/Shift^ sequence (see below) is typed, text may be entered directly into Gargoyle at the caret by typing on the keyboard. BackSpace and BackWord (Control-W) and new line (Return) will work during type-in. The caret will remain at the origin while text is entered. Any mouse click in the action area terminates text input. An existing text string may be edited in place by first selecting it and then typing BackSpace. The selected string will be restored to the state it was in before it was terminated; more characters may be added to the end of the string by type-in and BackSpace and BackWord and Return will work to edit existing parts of the string. Refer to the operations in the text menu for setting the interline spacing used by NewLine.
A text object has seven "segments" and twelve "joints" associated with it. The following picture shows the numbered joints and the named and numbered segments.
Delete: Abort Current Operation OR Delete
Delete has two uses. If, during an interactive operation, the user hits the Delete key BEFORE completing the operation, that operation will be aborted and Gargoyle returned to its state before the operation began. In other words, the user must strike the Delete key before letting go of all of the mouse buttons and all of Shift^ and Control.
When not performing an interactive operation, Delete deletes all selected objects. Equivalent to the Delete menu command in the Edit menu.
LeftShift-R15: Abort
LeftShift-R15 is currently NLI. It may be restored in future.
If the cursor is in the Gargoyle action area and LeftShift-R15 is held down for about two seconds, an abort action will occur. Painting will cease, the event queue will be flushed, gravity testing will cease (if it is in progress), VM consumption will cease, and Gargoyle will regain its composure.
Shift-Shift-R15: Emergency Save
Emergency save is provided by the Viewer package; it works for Gargoyle files as well as other (Tioga, for example) files. Hold down Shift^-Shift^-R15 until the cursor changes to a black square. Gargoyle should do a Save operation on all unsaved viewers. The nth unsaved, unnamed Gargoyle viewer gets saved to SaveAllEdits-n.gargoyle in the users home directory, just like Tioga.
LOOK 0,1,2,3,4,5,6,7,8,9:
Hold down the LOOK key (R9 on SPARCstation keyboards in the right-hand keypad) and type one of the digits on the QWERTY keyboard. Selected segments will acquire stroke width of the digit typed.
LOOK a,b,c,n,l,z and k
Hold down the LOOK key (R9 on SPARCstation keyboards in the right-hand keypad) and type one of these letters. Selected segments will become Arcs, B-splines, Conics, Natural-splines, (straight) Lines, or beZier cubics, respectively. LOOK k causes selected Bezier slices to become constrained Beziers.
LOOK s
[Artwork node; type 'Artwork on' to command tool]
LOOK-s produces a Triadic Koch Island or Snowflake curve from existing shapes. To be more precise, like the LOOK combinations just described, LOOK-s replaces each selected segment (only straight segments are currently modified). However, each selected segment is replaced by 4 new segments each 1/3 the length of the original as shown above. Repeatedly performing this command results in smaller and smaller bumps.
ShiftSpace, CtrlSpace, CtrlShiftSpace: Toggle Gravity
Equivalent to the Gravity toggle button. Designed to toggle gravity while an interactive operation is in progress.
Shift
BackSpace, Ctrl
BackSpace, CtrlShift
BackSpace: Delete caret segment
If the caret is on the end of an open trajectory, deletes the caret segment and positions the caret on the end of the previous segment in the trajectory.
Return (carriage return): Close
If the current caret trajectory is open, close it with a straight line segment and fill it with the trajectory's fill color. By default for a new trajectory, the fill color is gray.
CtrlA/CtrlShiftA: Drop/Lift Anchor
Drop or Lift Anchor. Equivalent to the DropAnchor and LiftAnchor menu commands in the HotSpots menu.
CtrlB/CtrlShiftB: Back/Front
Equivalent to the Back and Front menu commands in the Overlap menu.
CtrlC/CtrlShiftC: Cluster/UnCluster
Equivalent to the Cluster and UnCluster menu commands in the Groups menu.
CtrlD/CtrlShiftD: SelectAll/DeselectAll
Similar to the Tioga CtrlD (select entire Document). Equivalent to the SelectAll and DeselectAll menu commands in the Select menu.
CtrlG/CtrlShiftG: Toggle Gravity Choice
Equivalent to the GravType button; chooses between PreferPoints and PreferLines gravity.
CtrlH/CtrlShifH: Add/Remove Holes
Equivalent to the MakeHoles/UnmakeHoles commands in the Edit menu.
CtrlI: Grow selection
Equivalent to the Grow command in the Select menu. Grows the selection to the next level in the selection hierarchy.
CtrlJ: Add Joint
Equivalent to the AddJoint command in the Edit menu.
CtrlN/CtrlShiftN: Cycle Selections
Equivalent to the CycleSelection and UnCycleSelection buttons in the Select menu.
CtrlO/CtrlShiftO: SelectBackward/ShrinkBackward
Equivalent to the SelectBackward/ShrinkBackward buttons in the Select menu.
CtrlP/CtrlShP: Add/Delete Control Point
Equivalent to the Add CP/Delete CP commands in the Edit menu.
CtrlQ: Toggle Alignments
Equivalent to pushing the Alignments toggle button.
CtrlShiftQ: Kill Alignments
Equivalent to clicking "Slope:", "Angle:", "Radius:", and "LineDist:" menu buttons in succession.
CtrlS/CtrlShiftS: Make Hot/Make Cold
CtrlDoubleS/CtrlShiftDoubleS: Make All Hot/Make All Cold
Equivalent to pushing the corresponding buttons in the HotSpots menu.
CtrlU/CtrlShiftU: SelectForward/ShrinkForward
Equivalent to pushing the SelectForward/ShrinkForward buttons in the Select menu.
CtrlW: Weld or Backword
During text editing, does a backspace-one-word operation. Otherwise, equivalent to the Weld button in the Edit menu.
LF: Interpress Snapshot
Writes a snapshot of the current screen on file litshot.ip in the local directory.
CommandTool Features
GGToIP <gargoyle file names (patterns are ok)>
Takes a set of gargoyle files as input and produces an interpress master for each. For example:
GGToIP apple.gargoyle fred.5.gargoyle foo*.gargoyle
will produce the interpress files apple.ip, fred.5.ip, and some ip files that begin with foo (e.g., foo.ip, foo-1.ip, foo.78.ip).
GGIPToIP <script name> <interpress file names (patterns are ok)>
Applies a gargoyle script file to each of a set of interpress masters. In particular, for each interpress file, Gargoyle clears the scene, performs MergeIPEditable on the file, performs Playback of the named script on that interpress master, and writes out a new ip file. The name of the new IP file is derived by appending -mod.ip to the base name of the original file. For example,
GGIPToIP ScaleAndRotate.script apple.ip fred.5.ip foo*.ip
will produce the interpress files apple-mod.ip, fred.5-mod.ip, and some interpress files that begin with foo (e.g., foo-mod.ip, foo-1-mod.ip, foo.78-mod.ip).
The Gargoyle History Tool
The Gargoyle history tool lets you undo multiple edits in a way similar to the Tioga EditHistory tool. Unlike Tioga, there is an edit history and a history tool for each Gargoyle viewer, instead of one global history tool across all Gargoyle viewers. A Gargoyle history tool will be created when a new Gargoyle viewer is created if the user profile entry Gargoyle.AutoOpenHistory is TRUE. The default for AutoOpenHistory is also TRUE . You may destroy a Gargoyle history tool and later recreate it by using the HistoryTool entry in the Gargoyle Edit menu. The caption of an history tool will mirror the caption in its corresponding viewer/control panel.
At the top of a tool are two fields and four commands, just like the Tioga EditHistory tool. The bottom part of the tool is a text field displaying sequential numbers for and descriptions of previous edit events. Gargoyle keeps a history of a certain number of the most recent edit events. You can find out how large this history is by clicking the `Get' button, which will display a number (>= 1) in the `history size' field. The `Set' command will change the history size to whatever value you've entered in the history size' field; that value should be >= 1. The new value will take effect at the end of the next history event that occurs. The default history size is 40. Default history size is controlled by the user profile entry Gargoyle.DefaultHistorySize.
The history is cleared when a Clear, Restore, or Get command is executed.
The `Show' command will display the event numbers and events starting with the number in the `since Gargoyle event number' field. If that field is empty it will show as many as are still remembered. Middle or Right click on the "since Gargoyle event number" field will clear the event number viewer; Left click will "pending delete" select its contents . The format of the entries is <event-number>, TAB, then a string denoting the Gargoyle operation performed, optionally followed by a count of the number of objects that were selected when the operation was performed. These strings are terse.
The `Undo' command undoes the edits since the specified event number in the `since Gargoyle event number' field. Undo of past "Undo" events works, but may be slightly confusing. Unlike Tioga, there is just one history event for each user event, rather than a collection of events, and the Undo operation is independent of the current selection.
Like Tioga, Shift^-Esc causes an Undo of the last event. An immediately following Shift^-Esc returns the scene to its state before the first Shift^-Esc. The reason that the minimum size of a history is 1, rather than 0, is so that Shift^-Esc will work.
Selection operations do not count as undoable operations, and no events are recorded for selection actions by the user.
The following user actions are not undoable as of today. Some eventually will be. Let me know if you get bitten badly:
Selection. Caret position. Set/Apply defaults. Group/Ungroup. Text filled boxes. Text style.
User Profile Options
Gargoyle reads the user profile when it starts up, whenever the profile changes, and whenever there is a rollback or change of user. The user profile options are noticed when a new viewer is created. They do not affect existing viewers. The available options, shown with their defaults, are:
Gargoyle.
Heuristics: FALSE
Should new viewers be created with heuristics turned on?
Gargoyle.
GravityExtent: "0.3472222"
What should be the default gravity extent (in inches). Gravity will be set to this value both when the viewer is created an when the user middle clicks in the GravityExtent area of a viewer. The default extent corresponds to 25.0 points.
Gargoyle.
QuickClickEnable: FALSE
Enables the PopUpButton accelerators. Gargoyle will notice if you change your user profile but used the new value of QuickClickEnable for new viewers, not changing existing ones.
Gargoyle.
UseLatestIPVersion: FALSE
If this is set to TRUE, then Gargoyle will always use the highest numbered version of all IP Slices that are stored ByReference when reading in the .gargoyle file. If the IP file is updated after this, Save your changes and hit Restore to get the very latest version. If this is set to FALSE, Gargoyle will use the version of the IP file that was there when the Gargoyle file was created (if it still exists) or will complain if it doesn't exist.
Gargoyle.
DefaultDefaultFont: "xerox/xc1-2-2/helvetica [r1: 0.0 s: [10.0 10.0] r2: 0.0] 1.0 1.0"
This is the font that gargoyle will use if you haven't set the Default Font to anything yet. The default is Helvetica 10.
Gargoyle.
DefaultIncludeIPBy: Reference
Affects the behavior of MergeIPSlice. If this value is "Reference", the merged interpress slice will be stored in .gargoyle files by naming it. If this value is "Value" the actualy interpress data of the merged interpress slice will be stored in the .gargoyle when the scene is saved. This property can be changed after MergeIPSlice on a per-slice basis using the IncludeByReference and IncludeByValue buttons in the IP menu.
Gargoyle.
SeparateControlPanel: FALSE
If this is set to TRUE, then the Gargoyle command tool command will create two viewers, one a control panel and one a Gargoyle action area. Since a separate control panel need not reside in the same column as the action area, this permits the action area to be taller.
Gargoyle.
AutoScriptingOn: FALSE
If this is set to TRUE, Gargoyle will store all user actions in files whose names have the form <user name> <date and time>.script (e.g., bier871011-12-55-23.script). These scripts can be useful if Cedar crashes for recovering work (they are saved every 20 keystrokes) and, if sent to GargoyleImplementors:PARC will help us design the next Gargoyle user interface.
Gargoyle.
AutoOpenTypescript: TRUE
If this is set to TRUE, Gargoyle will automatically create a Gargoyle typescript, if one doesn't already exist, and open it in the right column, whenever a new Gargoyle window is created. If the typescript already exists, nothing happen; it is not opened in the right column. Gargoyle reports error messages in the typescript for leisurely perusal. Also, when the user asks what the style properties of an object, these are reported to the typescript where they can be edited and selected to change the properties. If this is FALSE, no typescript is created automatically. Typescripts can be created manually using the Typescript button on the Gargoyle control panel.
Gargoyle.
AutoOpenHistory: TRUE
If this is set to TRUE, Gargoyle will automatically create a Gargoyle History tool and open it in the right column. There is one history tool for each Gargoyle viewer. See the section above, The Gargoyle History Tool, for information on the history tool. A history tool can be created at any time y using the HistoryTool entry in the Edit menu.
Gargoyle.
DefaultHistorySize: 40
What should be the default size of the history maintained by Gargoyle for each Gargoyle viewer. The minimum history size is 1.
Gargoyle.
NewBoxesUnfilled: FALSE
If this is set to TRUE, then boxes that are added interactively will have no fill color instead of the default fill color.
Gargoyle.
HoldThatTiger: FALSE
If this is set to TRUE, then the Gargoyle icons show a certain popular tiger.
Gargoyle.
ControlPanelFile: "[Cedar]<Gargoyle>GargoyleControlPanel.tioga"
This file name describes a file to use as the active document part of the Gargoyle control panel. If multiple files are listed, separated by commas, Gargoyle will search for each in turn until it finds one that exist. If no value is given, or none of the named files exist, Gargoyle will look in [Cedar]<Gargoyle>GargoyleControlPanel.tioga.
The effect of the Gargoyle.ControlPanelFile option is partly determined by the Gargoyle.FancyPanel option described next.
Gargoyle.
FancyPanel: TRUE
If this option is TRUE, Gargoyle will try to find a fancy (Gargoyle-picture) to use as its control panel. It begins, its search with the Gargoyle.ControlPanelFile option described above, but will continue its search if that file is not a .gargoyle file.
Similarly, if this option is FALSE, Gargoyle will try to find a regular (Tioga document) to use as its control panel, beginning its search with the value of Gargoyle.ControlPanelFile.