GargoyleDesignExtra.tioga Segments, Joints, and Control Polygons Trajectories. A trajectory is an ordered sequence of control points x1, x2, . . . , xn and a partitioning into k subsequences, called links, such that each link shares exactly one point with its neighbor: {x1, x2, . . ., xi}, {xi, xi+1, . . . , xj}, . . . , {xj, xj+1, . . . , xn} and each link has an associated mapping Fm, 1 < m < n from a point subsequence to a plane curve. We will probably require these mappings to be chosen so that the plane curve interpolates the endpoints of each subsequence. This will require a careful choice of control point mappings for conic sections. A trajectory may intersect itself. The set of points which are inside such a contour is determined by the Imager wrap-number machinery. Hierarchy Unlike Griffin, in Gargoyle one can select objects even if they are part of a cluster. This may cause some confusion. We think that it this decision is justified by a number of desires: To constrain rigid objects, we need to be able to refer to their constrainable features (e.g. control points). We want to be able to copy any part of a trajectory from a finished object into one which is being designed. We wish to be able to delete holes separately from other parts of an outline (see below). Selecting objects in a hierarchy is a well-known problem. The common approaches are: 1) Provide commands for walking about in the hierarchy (up, down-left, right, left, previous-node, etc.) and introduce the concept of a current-node. We might be able to integrate this with our idea of a selection caret (the ideas are reminiscent of the up, down, left, right cursor commands in screen-oriented text editors). 2) Provide a way to point at the lowest levels of objects (e.g. characters and words in a text editor), and a way to extend the selection (e.g. double-click). This makes it rather hard to select top-level objects (it could take a lot of clicking). However a special mouse command could also be provided for selecting top-level objects. 3) Provide a way to point at two low-level objects (e.g. make a primary selection and extend it). The resulting selection is the common ancestor of both objects. Unfortunately, this requires that the user remember a good deal about the structure of the hierarchy, since he must be able to think of two objects which belong to the desired ancestor and to no lower-level cluster. Trajectory and Outline Commands Outline was defined above. Recall that an outline consists of exactly one fence trajectory, and zero or more hole trajectories. A simple outline has zero holes; a composite outline has one or more holes. Notice that outlines are just like clusters, except that their children must be simple trajectories, and except that one of the children is distinguished as the fence. Furthermore, we wish to be able to use the same operations to position hole trajectories relative to each other as we use to position outlines and clusters next to each other. We propose, then, that outlines should be created from simple outlines by a special clustering operation called MakeHoles. FreeHoles will do the inverse. MakeHoles. All selected objects except the first must be simple outlines. The fence of the outline which is selected first is the fence of the new composite outline; all of the others are hole trajectories. OpenTrajectory. As in Griffin, the user may only build a single trajectory at a time. However, pieces may be copied from existing objects as desired. To start a new trajectory, simply point and click the Add/Splice point command. A control point is shown (or many points if a symmetry tool is active) and a new trajectory is created. To edit an existing trajectory, Uncluster enough to bring the trajectory's outline to top-level. Select the desired trajectory (only one is allowed) and click OpenTrajectory (like Griffin's Modify). This can only be done if there is no trajectory currently open. The effect of OpenTrajectory breaks into 3 cases: 1) The trajectory is the fence of an outline with no holes. This case is identical to the new trajectory case. When CloseTrajectory is invoked, a changed outline becomes part of the scene. (However, its identity is remembered to permit Recluster to work properly.) 2) The trajectory is the fence of an outline with holes. OpenOutline must be done first to bring the trajectories to top level. CloseTrajectory. When you are done editing, click CloseTrajectory. If the trajectory is new, an outline will be created which is bounded by the new trajectory and has no holes. If the trajectory was previously part of an outline (either its fence or a hole) it resumes its previous role. Drag. Operations on Control Points In particular, imagine editing this string: ABCDEFGHI Make the analogy that each character represents a control point. An underlined sequence represents an interpolating spline. A bold sequence represents a straight line trajectory. An italic sequence represents a Bezier spline. The corresponding spline path might look like this: /Cyan/Imaging/gargoyle/trajectories.Press leftMargin: 1.0 in, topMargin: 1.0 in, width: 6.5 in, height: 3.5 in Notice that the sequences overlap by one point. This corresponds to our requirement that links have G0 continuity. We could imagine editing such a sequence with these operations: Create a sequence: ABCDEFGHI (creates an open straight line sequence by default). Select a subsequence: {ABCDE}FGHI Make it be an interpolating spline: ABCDEFGHI (overrides the polygonal property) Select another subsequence: ABCDE{FGHI} Make it be a Bezier spline: ABCDEFGHI Splice in a new control point (J): ABCDJEFGHI Splice in a new control point (K): ABCDJEKFGHI Append another subsequence (LMNO): ABCDJEKFGHILMNO Constraints Constrain. Done with a mode per constraint type. In this mode, point sequences are selected in order to participate in the constraints (as in Juno). Contraints such as parallel require selecting four points in order. Contraints such as bilateral-symmetry require selecting some number of sequences of points. ʘIhead1˜head2˜&IbodyšÏi œ:Ïdœžœ žœv˜ÍIdisplayšœžœžœ žœžœžœ žœžœžœ žœ˜NI continuationšœ)žœÏmœŸœ‡˜º—˜ MšœË˜ËIitemšœ‰ œ²˜ÇP˜ÒP˜ü—˜Mšœ}œœªœT˜ÃMš œÈ˜ÑMšœþ˜P˜ŒP˜Mšœ‘˜¡Mšœ˜—Lšœ˜Pšœ-˜-NšÏzÐbzÐbi˜ OšœE  œ2Ïbœ5œZ˜šIblock• ArtworkClass IncludePressšœr˜rO˜OšœfÏuœM˜´Nšœ£ œ6˜TNšœ£ ˜#Nšœ& ¡£œ$˜SNšœ ¡£˜)Nšœ ¡¢˜'Nšœ% ¡¢˜/Nšœ% ¡£¢˜0Nš œ œ ¡£¢Ðiz ˜3L˜ Mš œ¢œ=œ6˜¸J˜—…—2