|
|
1.1 ! root 1: .so ../ADM/mac ! 2: .XX 12 195 "PED \(em A Picture Editor" ! 3: .de fC ! 4: .sp .3v ! 5: .B "Figure \\$1." ! 6: .. ! 7: .TL ! 8: PED \(em A Picture Editor ! 9: .br ! 10: A User Manual ! 11: .AU ! 12: Theo Pavlidis ! 13: .AI ! 14: .MH ! 15: .SP 2 ! 16: .2C ! 17: .NH ! 18: Introduction ! 19: .PP ! 20: \fIPed\fP is a program for creating illustrations interactively ! 21: using the DMD5620 (Blit) terminal and the mouse. ! 22: (A version also exists for the Sun workstation.) ! 23: It runs under ! 24: .ft I ! 25: mux (mpx, layers) ! 26: .ft ! 27: so that you can use one window for drawing while keeping in contact ! 28: with the world through the other windows. ! 29: You can create simple illustration without having to read ! 30: more than a small part of this manual ! 31: provided that you have already some familiarity with ! 32: .US ! 33: and the terminal itself. ! 34: There is on-line documentation which you can access by pressing ! 35: button 2 of the mouse over a menu item. An expanded copy of that documentation ! 36: is given as Appendix A and you can consult it anytime you wish ! 37: to find out the meaning of a particular menu selection. ! 38: Section 3 describes how to produce ! 39: hard copies from ! 40: .I ped. ! 41: Part of ! 42: .I ped ! 43: runs on the host machine and part on the terminal. Small drawings are ! 44: handled only by the terminal part but large drawings are kept on the host ! 45: and only parts of them are brought in the terminal for editing. ! 46: Figure 1 should give you an idea of what you can draw with ! 47: .I ped . ! 48: .1C ! 49: .KF bottom ! 50: .BB ! 51: .so dragon.so ! 52: .fC 1 ! 53: An example of an illustration produced using \fIped\fP. ! 54: (Drawn by Paul Pavlidis.) ! 55: .KE ! 56: .2C ! 57: .PP ! 58: \fIPed\fP is part of Research ! 59: .UX ! 60: but it is also ! 61: available in many installations running System V or BSD ! 62: .UX ! 63: systems. ! 64: While it is was written originally for terminals with 256K ! 65: of memory its size has increased since then and there may ! 66: be problems in running the current version on such terminals. ! 67: .PP ! 68: While you draw on the bitmap of the terminal with the mouse ! 69: .I ped ! 70: maintains the information not as a copy of the bitmap but as ! 71: a list of points. This makes scaling easy so that ! 72: drawings produced by ! 73: .I ped ! 74: can be displayed on devices of different resolution. ! 75: (Thus while the image includes filled areas, ! 76: lines, and curves, \fIped\fP knows only about points. ! 77: As a matter of fact its name stands for \f(CWP\fPoint \f(CWED\fPitor.) ! 78: \fIPed\fP files are in ASCII and therefore can be edited using ! 79: text editors, although this is not a recommended procedure. ! 80: Whenever ! 81: \fIped\fP ! 82: exits (or is asked to edit a new file), it checks whether the file ! 83: has been modified since a previous save, and if it has it writes in ! 84: .CW ped.save . ! 85: Error messages (if any) are saved in a file called ! 86: .CW .pederr ! 87: in the user's current directory. ! 88: .PP ! 89: While ! 90: .I ped ! 91: is a currently available program, I consider it only as a first step ! 92: towards the development of a tool that would be as convenient to ! 93: use as writing and drawing on paper. ! 94: I would like to call such a facility ! 95: .ft I ! 96: electronic paper ! 97: .ft ! 98: and it is a concept that goes in the opposite direction from picture ! 99: description languages (such as \fIpic\fP|reference(latest pic)) or constraint systems ! 100: (such as \fIideal\fP|reference(latest ideal) or Xerox PARC's \fIjuno\fP). ! 101: The hope is that future versions of ! 102: .I ped ! 103: will provide more options without increasing the size of the menu or ! 104: the documentation. ! 105: See Section 5 (Beautification) for more on this topic. ! 106: .NH ! 107: Organization of PED ! 108: .NH 2 ! 109: Points, Objects, and Families ! 110: .PP ! 111: The basic unit or data structure ! 112: .I ped ! 113: is the ! 114: ``object.'' ! 115: As a rule objects appear as connected polygonal lines, ! 116: splines, circles, or blocks of text. ! 117: (See Appendix B for a formal definition of objects.) ! 118: Internally they consist (usually) of a set of points ! 119: and a ``type'' flag which determines how ! 120: the plotting routines will ! 121: use the points to produced various shapes. ! 122: .ft I ! 123: An important consequence ! 124: is that you must address objects on the screen ! 125: by pointing at their points rather than at sides or the interior ! 126: of polygons. ! 127: .ft ! 128: .PP ! 129: We could have added code to ! 130: .I ped ! 131: that would relax the above requirement so that people could ! 132: address polygons by pointing to ! 133: their interior, etc. We did not do so for two reasons. ! 134: One is that such code would increase the size of the program ! 135: and the time of interaction in a nontrivial way. Since users ! 136: adapted to the current mode quickly we felt that the slow ! 137: down caused by the new code would not be justified. ! 138: A second reason is that addressing the ! 139: interior of polygons would not be a useful action in a cluttered drawing. ! 140: .PP ! 141: Objects can become ! 142: associated in a ``family'' without changing their external ! 143: appearance. We describe later the menu selections that can do that. ! 144: When you touch a point ! 145: .I ped ! 146: also knows about the object that the points belongs to and, ! 147: if appropriate, an action is applied to the whole object. ! 148: If that object is a member of a family, then the action is applied ! 149: to the whole family. ! 150: .NH 2 ! 151: The Menus ! 152: .PP ! 153: .I Ped ! 154: displays a menu on the left side of the window. That menu may be changed ! 155: by selecting from a ``pop up'' menu with button 3 of the mouse. The following ! 156: selections are possible. ! 157: .IP "\f(CWbasic\fP: " ! 158: This is the active menu in the beginning and includes commands for ! 159: file manipulation, changing the type of display, etc. ! 160: (See Figure 1.) ! 161: .IP "\f(CWch size\fP: " ! 162: Commands that change the size of what has been drawn. ! 163: Also transformations such as rotation. ! 164: .IP "\f(CWmove\fP: " ! 165: Commands that delete, copy, do parallel translations ! 166: (move) objects, etc. Also commands that break objects in parts or join ! 167: objects to form new ones. ! 168: .IP "\f(CWdraw\fP: " ! 169: Set up a grid, draw lines, text labels, circles, boxes, etc. ! 170: Also make a family out of a group of objects. ! 171: .IP "\f(CWreshape\fP: " ! 172: Convert a polygon into a spline, adjust the position of points, ! 173: dissolve a family of objects, or restore it, etc. ! 174: (See Figure 2.) ! 175: .IP "\f(CWrefine\fP: " ! 176: Edit text, line form (dashed, solid, double, etc.), change point size, etc. ! 177: .IP "\f(CWshade\fP: " ! 178: Fill polygons or splines with texture or unfill them. ! 179: .IP "\f(CWcolor\fP: " ! 180: Assign a color to objects. This has no visible effect on the DMD 5620 ! 181: but the color label may be used by other devices. ! 182: .IP "\f(CWremote\fP: " ! 183: Commands to perform editing on the host. ! 184: .1C ! 185: .KF ! 186: .BB ! 187: .so mvpoint.so ! 188: .fC 2 ! 189: The screen of the DMD 5620 when \fIreshape\fP has been ! 190: selected from the pop up menu by button 3 of the mouse ! 191: and then \fImv point\fP from the left side menu by button 1. ! 192: .KE ! 193: .2C ! 194: .PP ! 195: As a rule, the program remembers the last command given and will ! 196: execute it repeatedly, as long as it is meaningful to do so ! 197: or until the user makes another selection. ! 198: Thus one can fill many polygons with the same texture without ! 199: having to select it each time. In this case the mouse cursor ! 200: has the form of the texture. In other menus ! 201: the effective command is shown in reverse video. ! 202: .NH 2 ! 203: The Mouse Buttons ! 204: .PP ! 205: Button 1 is the ``creative'' or ``start'' button. It is used to select ! 206: actions from the menu displayed on the left hand side, to draw ! 207: or edit objects, and, in general, ! 208: pretty much as pencil could be used to draw or point ! 209: to things. ! 210: .PP ! 211: Button 3 is the ``terminating'' button. When pressed it stops drawing ! 212: or editing, or it may cancel some commands. It is also used to ! 213: change the menu on the left. ! 214: .PP ! 215: Button 2 is the ``panic'' button. When pressed over a menu item, ! 216: it causes the display of documentation. When pressed elsewhere, ! 217: it cause the ! 218: .I basic ! 219: menu to be displayed on the left. ! 220: .PP ! 221: Typing text disables the mouse so ! 222: that you cannot exit from that mode by pressing button 3. ! 223: However, hitting RETURN twice will take you out. ! 224: .NH 2 ! 225: Files ! 226: .PP ! 227: When a file is first read it is kept on the host. ! 228: It requires user action to bring it to the terminal so that ! 229: it can be edited (``bring in'' item on the ``basic'' menu). ! 230: ``View host'' lets you display the complete picture ! 231: that is the file and is now kept in the host; no data are kept in the terminal ! 232: part and therefore you cannot edit the file (except by the ``remote'' ! 233: menu commands.) ! 234: Since large figures will not usually fit in the terminal, you ! 235: must display them (scaled down) first with the ``view host'' command and ! 236: then select a part with a window controlled by button 1. ! 237: After selecting ``bring in'' from ! 238: a menu the black square cursor appears. Clicking button 1 ! 239: fixes the top left corner, clicking button 1 a second time fixes the ! 240: bottom right corner of a rectangle. ! 241: (Note that this is different from the way that windows are controlled ! 242: under the multiplexing program ! 243: with button 3.) ! 244: Any objects found within that rectangle ! 245: are brought in and displayed on the terminal, ! 246: and at a bigger scale. Then they can be edited. ! 247: .PP ! 248: A unique feature of ! 249: .I ped ! 250: is that you may read a file into a particular part of ! 251: the screen (``read'' command in the ``remote'' menu), or write a ! 252: part of the screen into a file (``write'' command in the ``remote'' menu). ! 253: .NH ! 254: Hard Copy ! 255: .PP ! 256: There are two ways to make hard copy of the pictures you draw, ! 257: either by copying bitmaps from the 5620 screen or by expanding ! 258: the ! 259: .I ped ! 260: files by the ! 261: .I troff ! 262: preprocessor ! 263: .I tped. ! 264: .NH 2 ! 265: Bitmaps ! 266: .PP ! 267: You can get bitmaps by selecting ``blitblt'' from the basic menu (see Figure 1) ! 268: and then sweeping a rectangular area from the screen. ! 269: This action will ! 270: create a file called BLITBLT which is a run length encoded ! 271: copy of the bitmap. Of course, you can run the ! 272: .US ! 273: .I blitblt ! 274: command from another window if you wish with the same result. ! 275: If the rectangle has size zero (or nearly so) or button 3 is pressed, ! 276: then a copy of the whole drawing are is made. ! 277: The BLITBLT file can be printed on the Gnot ! 278: printers with the \fIgbcan\fP command or included in \fItroff\fP ! 279: files by using the \fImbits\fP macros. ! 280: (This is how all the pictures of the ped screen in this document were made.) ! 281: The action of the library macro BM depends on the number of its arguments. ! 282: The ! 283: .CW .bM ! 284: macro defined below can be used either as ! 285: .P1 ! 286: \&.bM fname ! 287: .P2 ! 288: to print the bitmap of file \fIfname\fP with default setting of dot size (6) ! 289: or as ! 290: .P1 ! 291: \&.bM number fname ! 292: .P2 ! 293: to print with dot size \fI number\fP. ! 294: .P1 ! 295: \&.de bM ! 296: \&.sp ! 297: \&.ie \e\en(.$=1 .BM \e\e$1 6 dX dY ! 298: \&.el .BM \e\e$2 \e\e$1 dX dY ! 299: \&.br ! 300: \&.ne \e\en(dYu ! 301: \&.in (\e\en(.lu-\e\en(dXu)/2u ! 302: \&.ie \e\en(.$=1 .BM \e\e$1 6 ! 303: \&.el .BM \e\e$2 \e\e$1 ! 304: \&.in ! 305: \&.rs ! 306: \&.sp \e\en(dYu ! 307: \&.. ! 308: .P2 ! 309: .NH 2 ! 310: Tped ! 311: .PP ! 312: This program works like other ! 313: \fItroff\fP preprocessors with the following specifications. ! 314: It is run as ! 315: .P1 ! 316: tped \fIfiles\fP ... | troff \fIoptions\fP ! 317: .P2 ! 318: The various files can be \fIped\fP files without any modifications. ! 319: Or they may be \fItroff\fP input files ! 320: including \fIped\fP files in one of the following ways. ! 321: .IP (a) ! 322: The \fIped\fP file is embedded in the \fItroff\fP file ! 323: between ! 324: .P1 ! 325: \&.GS ! 326: \&..... ! 327: ped file contents ! 328: \&..... ! 329: \&.GE ! 330: .P2 ! 331: .IP (b) ! 332: The name of the \fIped\fP file is given as argument as in ! 333: .P1 ! 334: \&.GS file_name ! 335: .P2 ! 336: .PP ! 337: .I tped ! 338: recognizes the following flags: ! 339: .IP \f(CW-b\fP 6n ! 340: place a box around each illustration. ! 341: .IP \f(CW-c\fP ! 342: produce expanded output. ! 343: .IP \f(CW-Ta\fP ! 344: assume that final output will be done in ! 345: the \fIaps\fP phototypesetter. ! 346: .IP \f(CW-Td\fP ! 347: assume final output on the Mergenthaler ! 348: or the Gnot printers (default). ! 349: .IP \f(CW-m\fP ! 350: if used after a set of file names, it causes \fItped\fR ! 351: to read from the standard input after reading the files. ! 352: .IP \f(CW-s\fP ! 353: scale the letter point size. ! 354: .PP ! 355: Two of these flags require special discussion. ! 356: When ! 357: .I tped ! 358: expands the ! 359: .I ped ! 360: files it can do in one of two ways. It may produce a series of dots ! 361: that form the lines, textured areas, etc. or it may simply pass on ! 362: the object description with slight modifications only. Then the ! 363: plotting is done by the ! 364: .I troff ! 365: postprocessor. ! 366: Plots obtained in this way are of better quality than plots when ! 367: the expansion is done before ! 368: .I troff. ! 369: However the postprocessors must know about ! 370: .I ped ! 371: so that version is less portable. (See Appendix C.) ! 372: The ! 373: .CW -c ! 374: flag allows the user to select either option. ! 375: .PP ! 376: In addition to the above, it is possible to change parameters ! 377: with arguments supplied with the ! 378: .CW .GS ! 379: line. The following options exist: ! 380: .KS ! 381: .TS ! 382: center; ! 383: cFCW l. ! 384: h=\fInumber\fP Make drawing height \fInumber\fP inches. ! 385: w=\fInumber\fP Make drawing width \fInumber\fP inches. ! 386: -C Center drawing on page (default). ! 387: -L Left adjust drawing. ! 388: -R Right adjust drawing. ! 389: -s Toggle scaling of text. ! 390: .TE ! 391: .KE ! 392: The adjustment options can be used to print ! 393: .I ped ! 394: drawings side by side as the following example illustrates. ! 395: .P1 ! 396: \&.sp ! 397: \&.ne 4i ! 398: \&.sp ! 399: \&.mk ! 400: \&.GS \-L left_part ! 401: \&.sp ! 402: \&.rt ! 403: \&.GS \-R right_part ! 404: \&.sp ! 405: .P2 ! 406: The above arrangement assumes that both parts have the same dimensions. ! 407: If not, similar heigh may be forced with the \f(CWh=number\fP option. ! 408: .NH ! 409: Special Features ! 410: .PP ! 411: All the features of ! 412: .I ped ! 413: are documented systematically in Appendix A. We review here only ! 414: those that we felt they needed a more detailed explanation. ! 415: .NH 2 ! 416: Markers ! 417: .PP ! 418: Sometimes it is not easy to identify the points of an object ! 419: and for this reason \fIped\fP provides the ``markers'' selection ! 420: in its ``basic'' menu. If you select that option, then various auxiliary lines ! 421: and points appear on the screen. In particular, a ``bullet'' ! 422: is used to identify one point on each object, ! 423: dotted lines connect objects belonging to the same family, ! 424: and a simplified drawing is used for some ! 425: of the fancier objects. ! 426: The use of markers is recommended during preparation ! 427: of an illustration and you should turn them off only when ! 428: you want to see how your finished product will look. ! 429: For example, a text label can be addressed only by placing ! 430: the mouse at the particular point associated with the label. ! 431: That point is not visible unless the markers are on. ! 432: .NH 2 ! 433: Text ! 434: .PP ! 435: Text can be included by selecting ``text'' ! 436: in the ``draw'' menu and then typing it. Text labels ! 437: consisting of many lines. To terminate text entry type an ! 438: empty line. When text is entered at first it appears as ! 439: left adjusted. The ``refine'' menu has a command that lets you ! 440: make text centered or right adjusted. In addition you can edit ! 441: text by using the command ``edit text'' in the ``refine'' ! 442: menu. The selected text appears at the top area of the screen. ! 443: Click button 1 over the spot you wish to change. ! 444: Use back space to erase and type new characters to replace ! 445: or insert. Hitting return ! 446: completes the correction at the selected spot. ! 447: You may make more corrections if you wish ! 448: by selecting another spot on the label. Otherwise you hit button 3 ! 449: to indicate that text editing is over. ! 450: .PP ! 451: It is not possible to edit in ! 452: .I ped ! 453: labels that are too long to fit in the top area of the window ! 454: (over 80 characters for windows that take the full width of the terminal). ! 455: This is perhaps the only instance that a ! 456: .I ped ! 457: file must be edited with a text editor. ! 458: .PP ! 459: Text is normally entered in point size 10, but the ``psize'' ! 460: lets specify another size. ! 461: All new text entered from then on will be in the selected point size. ! 462: The commands ``expand'' and ``shrink'' of the ``ch size'' menu ! 463: result in a change of the point size when applied to text. ! 464: .NH 2 ! 465: Splines ! 466: .PP ! 467: The splines used in ! 468: .I ped ! 469: consist of parabolic arcs tangent to a polygon drawn by the user. ! 470: They are the same splines that ! 471: .I pic ! 472: uses and they are discussed in detail in |reference(pavlidis image processing). ! 473: .PP ! 474: Splines pass through the vertex of the polygon only if that vertex ! 475: is made a ``corner'' by the ``reshape'' menu selection. ! 476: The first and last points of an open polygon are made by default into ! 477: corners when it is converted into a spline. ! 478: If you wish interpolating splines you must use the command ``isplin'' ! 479: in the ``refine'' menu. In order to let the user have access to the ! 480: original points the type of the figure is not changed: it is a polygon ! 481: but it is drawn as a spline. ! 482: .NH 2 ! 483: Line Forms ! 484: .PP ! 485: Polygons or splines may be drawn either by solid or dashed lines ! 486: in different thickness as specified by the line point size. ! 487: In addition polygons may use double lines, heavy lines, and interpolating ! 488: splines (see above). The last three forms require ! 489: floating point arithmetic so they are not displayed in local ! 490: mode but only when you do a ``view host.'' (In local mode the ! 491: sides are marked with a symbol.) Such fleeting drawings forms may ! 492: be fixed so that the objects appear in tha form even in local mode. ! 493: However in this case the original points are lost. See Figure 3 ! 494: for an example. ! 495: .1C ! 496: .KF ! 497: .GS h=2 fig1 ! 498: .fC 3 ! 499: The figure displays the original polygon, ! 500: the interpolating spline, and the guiding polygon for the latter. ! 501: The ``fix'' command replaces the original polygons by the guiding ! 502: polygon. ! 503: .KE ! 504: .2C ! 505: .NH 2 ! 506: Families and Links ! 507: .PP ! 508: Objects may be associated in a ``family'' ! 509: so that they can be moved around or scaled as a group. ! 510: The ``draw'' menu has a command ``family/bx.'' When you select it ! 511: a sweeping rectangle becomes available and any objects enclosed ! 512: by it become members of the same family. If markers are on, ! 513: .I ped ! 514: places dotted lines connecting objects of the same family. ! 515: .PP ! 516: Families are groups of objects that have nothing in common ! 517: except that ! 518: .I ped ! 519: thinks of them as a single object. They can have ! 520: different types and a family may be ! 521: a member of another family. ! 522: On the other hand ! 523: linked objects must be of the same kind: all open polygons, ! 524: or all closed splines, etc. ! 525: .PP ! 526: When objects are linked ! 527: the visual appearance of the sketch does not change. ! 528: This is similar to a family but the ! 529: link is far stronger and the ``dissolve'' command has no effect. ! 530: On the other hand linked objects can be edited the same way ! 531: as simple objects. ! 532: .ft I ! 533: Warning: \fRPed\fP provides no visible connection between linked objects. ! 534: Link should be used only between objects that are obviously related. ! 535: .ft ! 536: Indeed, the command was introduced with the following two ! 537: applications in mind. (a) To prepare filled ! 538: polygons that have holes in them. ! 539: (In this case ``link'' should be followed immediately by a shading command.) ! 540: (b) To ! 541: create a single object after the ``match'' instruction has been ! 542: applied. ! 543: In this way a T-shaped figure (or a tree) could become a single object. ! 544: The ``break'' operation has special effects on linked objects. ! 545: It simply removes the first link it encounters and breaks the polygon ! 546: into two. At least one of them has no links at all. ! 547: .I Ped ! 548: actually refuses to link splines, but you can defeat that restriction by ! 549: linking first, and then converting into a spline. ! 550: Application of ``join'' to an open polygon with links converts all ! 551: its contours into closed polygons. ! 552: .PP ! 553: Users should keep in mind that the ``remote'' menu allows operations ! 554: on groups of objects so there is no need to make the whole drawing ! 555: a family in order to apply an operation on all the objects. ! 556: .NH 2 ! 557: Planning and Clutter ! 558: .PP ! 559: A major difference between drawing on paper and ! 560: drawing by electronic means is that you do not have to worry about the ! 561: composition until you are ready to do so. ! 562: Components of the illustration can and should be drawn separatedly ! 563: and pulled together only at the end. Large drawings may be in separate files ! 564: and be composed through the ``read'' command of the ``remote'' ! 565: menu. The ``match'' and ``center'' commands of the ``move'' menu ! 566: allow fine positioning adjustments. ! 567: .PP ! 568: Temporary moves are useful for reducing clutter. ! 569: If you select ``mv obj'' and then press button 3 (or 2) ! 570: the object is left in the chosen position only temporarily. ! 571: Next time you return to the basic menu, all such objects ! 572: resume their original positions. ! 573: .NH 2 ! 574: Equations ! 575: .PP ! 576: Mathematical equations can be included in \fIped\fP drawings by ! 577: typing ! 578: .I eqn ! 579: commands between delimiters (e.g. ! 580: .CW $$ ) ! 581: as text ! 582: and then piping the output of ! 583: .I tped ! 584: through ! 585: .I eqn. ! 586: Since the form of displayed labels is different than those ! 587: of the final output some experimentation is needed to ! 588: achieve the desired positioning. ! 589: .NH ! 590: Beautification ! 591: .PP ! 592: A good draftsman is able to take a rough sketch and convert it into ! 593: a ``neat'' drawing. It is desirable to have similar facilities ! 594: in the graphics editor. ! 595: The menu selection ! 596: ``formal'' (in the ``reshape'' and the ``remote'' menus) will ! 597: transform an object or group of objects so that lines that are ! 598: nearly parallel become parallel, lengths that are ! 599: nearly equal become equal, etc. ! 600: The algorithm used for the transformation is described in detail ! 601: in |reference(pavlidis van wyk beautifier). ! 602: .1C ! 603: .KF bottom ! 604: .BB ! 605: .so nice.so ! 606: .fC 4 ! 607: A drawing before and after beautification. ! 608: .KE ! 609: .2C ! 610: .PP ! 611: Beautification can reduce the need for long menus. Suppose we want ! 612: to draw a line tangent to a circle. We could add a menu option ! 613: that would draw a tangent from a point to a circle but we could also ! 614: leave the problem to the beautifier. You would draw a circle ! 615: and a line approximating the tangent and then pass these to ! 616: objects to the beautifier. Nearly tangent can be detected by ! 617: finding that the distance of the center of the circle from ! 618: the line is nearly equal to the radius. Then a system of ! 619: equations and inequalities ! 620: can be solved to find new objects that are mutually tangent ! 621: and close to the original objects. The same routines could ! 622: be generalized to handle the problem of having a line (or lines) ! 623: tangent to any number of circles, without having to add any more ! 624: menu instructions. ! 625: .PP ! 626: .I Ped ! 627: is still very far from replacing a good draftsman and it is highly ! 628: unlikely that it ever will. But it is likely that more ! 629: features will be added to the beautification transformation. ! 630: .NH ! 631: User Operations ! 632: .PP ! 633: There is a mechanism for executing ! 634: .UX ! 635: commands and incorporating their output in the drawing. ! 636: A command may be typed in advance (while in the command typing mode) or ! 637: it may be typed at the time of its invocation. ! 638: There are two menus offering a ``user oper'' selection: ! 639: ``draw'' and ``refine.'' In the former you need select only ! 640: a point on the screen before applying the command.\(dg ! 641: .FS ! 642: \(dg The current implementation also expects typing of the command ! 643: at that moment. ! 644: .FE ! 645: In the latter you must select an object as well. ! 646: If there is no previously defined command you are prompted ! 647: for it. ! 648: The following rules are applicable. ! 649: .PP ! 650: If the object type is text, then the text is itself is supplied as ! 651: input to the ! 652: .UX ! 653: command. the output is collected as text and replaces ! 654: the original. ! 655: .PP ! 656: If the object type is polygon or spline the two coordinates of each point ! 657: are supplied to the ! 658: .UX ! 659: program, one point per line. ! 660: The string ! 661: .CW 1e6 ! 662: is appended as end-of-file indicator. ! 663: .PP ! 664: If the object type is family, then the whole object is provided ! 665: to the command using ! 666: .I ped ! 667: format. ! 668: .PP ! 669: Often the command is ! 670: \f(CWa.out\fP, ! 671: a program written by the user for transforming geometric figures. ! 672: Text processing commands such as ! 673: .DS ! 674: .ft CW ! 675: tr "[a-z]" "[A-Z]" ! 676: .ft ! 677: .DE ! 678: are also common. ! 679: Finally, the ``user oper'' command may used in order to include ! 680: the output of commands such as ! 681: .I date ! 682: as part of illustrations prepared by ! 683: .I ped. ! 684: The inclusion of the output of programs that produce complex ! 685: illustrations is best done by having them output ! 686: their results in ! 687: .I ped ! 688: format. (See Appendix B.) ! 689: .SH ! 690: Acknowledgments ! 691: .PP ! 692: Many people provided considerable input for ! 693: .I ped, ! 694: especially its early users and those porting it to new machines. ! 695: Early users include amongst others Paul Pavlidis, Mary Bittrich, ! 696: Doug McIlroy, Bob Hutchison, John Cregar, and Sandy Fraser. ! 697: Bob Hutchison and Jon Sauer contributed significantly ! 698: to the porting of the program to ! 699: .UX ! 700: V and other ! 701: output devices. Janet Lee wrote the online documentation ! 702: and also contributed to the porting on 3B machines. ! 703: .PP ! 704: The following people either provided parts of the software ! 705: or let me use their code as prototype: ! 706: Ken Thompson (routines for creating the double lined objects), ! 707: Tom Killian (``blitblt'' routines), ! 708: Tom Szymanski (high level communications protocol), ! 709: and Tom Cargill (menu design). ! 710: George Wolberg helped with the implementation of many of the routines ! 711: in an early version of the program. ! 712: .PP ! 713: Lorinda Cherry, Steve Mahaney, and Doug McIlroy made many useful comments on ! 714: various versions of the documents describing the use and ! 715: organization of ! 716: .I ped. ! 717: .SH ! 718: References ! 719: .LP ! 720: |reference_placement ! 721: .de hD ! 722: .ft CW ! 723: .sp 0.5 ! 724: .NE 1i ! 725: .. ! 726: .SH ! 727: Appendix A: Command Actions ! 728: .PP ! 729: The following is a slightly expanded version of the online documentation ! 730: which becomes available when you press button 2 over ! 731: a menu selection. It is based on documentation written by Janet Lee. ! 732: .hD ! 733: basic ! 734: .LP ! 735: Collection of commands that manipulate files and/or groups ! 736: of objects. ! 737: .RS ! 738: .hD ! 739: type comm ! 740: .LP ! 741: Enable the keyboard for file manipulation and ! 742: .UX ! 743: commands. ! 744: Commands are: ! 745: .CW "w filename" ! 746: (write to a file), ! 747: .CW "r filename" ! 748: (read ! 749: from a file), ! 750: .CW "e filename" ! 751: (edit a file), ! 752: .CW f ! 753: (print current file), ! 754: .CW "u string" ! 755: (execute `string' as a ! 756: .UX ! 757: command when ``user oper'' is ! 758: selected in the ``refine'' menu), ! 759: .CW pwd ! 760: and ! 761: .CW cd ! 762: (execute the ! 763: .UX ! 764: commands), ! 765: .CW qq ! 766: (exit PED) and ! 767: .CW m ! 768: (revive the mouse). The mouse is also revived ! 769: by a newline, or pressing any button. ! 770: .hD ! 771: view host ! 772: .LP ! 773: Display the file stored on the host machine and make it available ! 774: for remote editing. The display is made in STORE mode so you ! 775: can see how the picture would look when printed by the tped|troff ! 776: combination. Also filled splines, double lines, and other fancy ! 777: features of PED are shown correctly. ! 778: When selecting ``view host'' while there is already a display, ! 779: you can specify the portion of the drawing to be viewed by drawing ! 780: a rectangle using button one. ! 781: Buttons two and three cancel the view host. ! 782: .hD ! 783: bring in ! 784: .LP ! 785: Bring the file into the DMD terminal for local editing. ! 786: If there is no display the whole file is brought in. Otherwise ! 787: a sweep rectangle is made available for selecting the portion ! 788: to be brought in. If the sweep rectangle is too small, the ! 789: entire file is brought in. ! 790: .hD ! 791: markers(t) ! 792: .LP ! 793: Mark with black ``bullets'' the first point of each object. ! 794: Also display the control polygons of splines and show dashed ! 795: lines ! 796: connecting the members of each family. It is a good idea to ! 797: have the markers on when working on a file. ! 798: The command is a toggle; selecting ``markers'' again erases the ! 799: markers. ! 800: .hD ! 801: HELP/plot ! 802: .LP ! 803: Display a summary documentation of PED and then redraw the ! 804: display of objects. ! 805: .hD ! 806: zoom ! 807: .LP ! 808: Display a closeup of the image. The apparent size is ! 809: increased by 1/8. The actual size of the picture is unchanged. ! 810: .hD ! 811: unzoom ! 812: .LP ! 813: The apparent size of the image is decreased by 1/8. ! 814: The actual size of picture is unchanged. ! 815: .hD ! 816: scroll ! 817: .LP ! 818: Scrolls the image on the screen. A line is drawn from the center ! 819: of the screen. Any button selects the terminating point of the ! 820: line which becomes the new center of the screen. The entire ! 821: drawing is shifted to accommodate the new center. ! 822: .hD ! 823: size? ! 824: .LP ! 825: A sweep rectangle becomes available. After sweeping an area of the ! 826: screen PED prints the size of that area in inches when the drawing ! 827: is printed by tped|troff. ! 828: If the rectangle size is too small, it prints the ! 829: size of the whole drawing area. ! 830: .hD ! 831: blitblt ! 832: .LP ! 833: Creates a bit map of the image in the file BLITBLT in your current ! 834: directory. This can be printed on other devices by appropriate ! 835: commands. For the Gnot printer the command is ! 836: .I gbcan . ! 837: .hD ! 838: exit ! 839: .LP ! 840: Exit PED program. If your file has been modified since the ! 841: last write it is saved in a file called ! 842: .CW ped.save ! 843: in the current ! 844: directory. PED plays it safe so that if it is not sure ! 845: whether a file has been modified it will save it anyway. ! 846: Errors, if any are in ! 847: .CW .pederr . ! 848: .RE ! 849: .hD ! 850: ch size ! 851: .LP ! 852: Commands that scale or apply simple geometrical transformations ! 853: to the drawing. Mot of them are executed on the host because of ! 854: the need for floating point. ! 855: .RS ! 856: .hD ! 857: expand ! 858: .LP ! 859: Increases the size of an object by a factor of 1.25. ! 860: Click button one over the object to be expanded. ! 861: .hD ! 862: shrink ! 863: .LP ! 864: Reduces the size of an object by a factor of 0.8. ! 865: Click button one over the object to be shrunk. ! 866: .hD ! 867: rotate ! 868: .LP ! 869: Select an object with button one. This produces a circle around ! 870: the object and a line drawn from the circle. Selecting a point ! 871: on the circle with button one rotates the object to this point. ! 872: Selecting a point on the axis that is not on the circle expands ! 873: or shrinks the object with the rotation. ! 874: If the point is selected on the center of the circle, then a 90 ! 875: degree rotation is made. ! 876: Pressing button three terminates the command. ! 877: .hD ! 878: turn 45 ! 879: .LP ! 880: Select an object with button one and the object rotates 45 degrees. ! 881: .hD ! 882: v-flip ! 883: .LP ! 884: Select an object with button one and the object is flipped ! 885: vertically. ! 886: .hD ! 887: h-flip ! 888: .LP ! 889: Select an object with button one and the object is flipped ! 890: horizontally. ! 891: .hD ! 892: v-elong ! 893: .LP ! 894: Select and object with button one and the object is elongated ! 895: vertically. ! 896: .hD ! 897: h-elong ! 898: .LP ! 899: Select and object with button one and the object is elongated ! 900: horizontally. ! 901: .hD ! 902: undorot ! 903: .LP ! 904: Select an object with button one to undo a previous rotation. ! 905: Undorot must be used immediately after the rotation command ! 906: and for the same object. ! 907: .RE ! 908: .br ! 909: .ne 2i ! 910: .hD ! 911: move ! 912: .LP ! 913: Commands for manipulating and moving around objects ! 914: .RS ! 915: .hD ! 916: del obj ! 917: .LP ! 918: Delete the object selected. Clicking button one over any object ! 919: removes the object and replaces it with a skull and crossbones ! 920: symbol. Pressing button three completes the delete, any other ! 921: button cancels it. ! 922: .hD ! 923: copy obj ! 924: .LP ! 925: Copies the object selected. Click button one over the ! 926: object to be copied. An image of the object appears. ! 927: Move the image using the mouse to the desired location ! 928: and press button one to complete the copy. Pressing button ! 929: two or three cancels the copy. ! 930: .hD ! 931: mv obj ! 932: .LP ! 933: Move the selected object. Click button one over the object and ! 934: an image of the object appears. Move the image using the mouse ! 935: and click button one to complete the move when the object appears ! 936: in the desired location. Clicking button 2 or 3 cancels the move ! 937: but it leaves the object in the new location until one returns ! 938: to the basic menu. This operation is useful for unscrambling ! 939: temporarily crowded areas of the drawing. ! 940: .hD ! 941: brk obj ! 942: .LP ! 943: Used to remove sides of polygons or destroy links. ! 944: Click button one over the first point and then select the ! 945: second point. The line between them is removed. ! 946: If the polygon is not connected then the first application ! 947: of the command will make two objects out of the commands ! 948: rather than remove any side. ! 949: .hD ! 950: attach ! 951: .LP ! 952: It merges two open polygons by moving the second so that ! 953: the two selected points coincide. The command fails if either ! 954: of the selected points is not an endpoint. The two points ! 955: are selected with button one. Using any other button ! 956: between the two point selections cancels the attachment. ! 957: .hD ! 958: join ! 959: .LP ! 960: It merges two open polygons by drawing a line between the ! 961: two selected points without moving anything. The command fails ! 962: if either of the selected points is not an endpoint. ! 963: The two points are selected with button one. ! 964: Using any other button between the two point selections ! 965: cancels the attachment. ! 966: .hD ! 967: link obj ! 968: .LP ! 969: Select a polygon using button one. Any polygon selected ! 970: afterwards with button one is linked to the first polygon ! 971: (i.e. the objects become one object). You can link any number ! 972: of polygons together. Terminate the command by pressing button ! 973: two or three. The polygons may be open or closed but all of ! 974: them must be the same kind (open or closed). The main use ! 975: of the command is to prepare contours for filled objects ! 976: with holes. ! 977: .hD ! 978: match ! 979: .LP ! 980: Select an object with button one. Then select any number of ! 981: objects with button one and the touched points will coincide. ! 982: Pressing any button other than button one terminates the command. ! 983: The objects remain separate. ! 984: .hD ! 985: center ! 986: .LP ! 987: Select an object with button one. Then select any number of ! 988: objects with button one. The objects are moved so their ! 989: centers coincide (the first object selected dictates which ! 990: object to center on). Pressing button two or three terminates ! 991: the command. ! 992: .hD ! 993: family/pt ! 994: .LP ! 995: Define a family by selecting points of different objects ! 996: with button one. The family connections can be viewed ! 997: using the markers option (basic menu). When families are ! 998: formed in this way, their objects are plotted in the order ! 999: by which they were placed in the family. Therefore one can ! 1000: determine sequence of plotting which may be important for ! 1001: filled objects. ! 1002: Using button two or three terminates the command. ! 1003: .RE ! 1004: .hD ! 1005: draw ! 1006: .LP ! 1007: Used for drawing objects. Must be used to begin a drawing. ! 1008: .RS ! 1009: .hD ! 1010: no grid ! 1011: .LP ! 1012: Removes the grid from the screen ! 1013: .hD ! 1014: grid:FMC ! 1015: .LP ! 1016: Create a grid on the screen either Fine, Medium, or ! 1017: Coarse (FMC) depending on the number of times the ! 1018: option is selected. ! 1019: .hD ! 1020: lines ! 1021: .LP ! 1022: Draws lines. Button one is used to select the starting ! 1023: and terminating points of a line. ! 1024: Buttons two and three terminate the command. ! 1025: .hD ! 1026: text ! 1027: .LP ! 1028: Select a point for the text using button one and type from the ! 1029: keyboard. Two returns terminates input. ! 1030: .hD ! 1031: circle ! 1032: .LP ! 1033: Draws circles. Click button one over the center of the circle. ! 1034: Draw the circle outward and click button one again to define the ! 1035: radius. ! 1036: .hD ! 1037: box ! 1038: .LP ! 1039: Draws boxes. Click button one over the upper left (right) corner ! 1040: of the box and move the mouse right (left) and define the lower ! 1041: right (left) corner of the box by clicking button one again. ! 1042: .hD ! 1043: oval ! 1044: .LP ! 1045: Draws ovals. Click button one over the upper left (right) corner ! 1046: of the oval and move the mouse right (left) and define the lower ! 1047: right (left) corner of the oval by clicking button one again. ! 1048: .hD ! 1049: family/bx ! 1050: .LP ! 1051: Define a family by surrounding family elements in a box. ! 1052: The upper and lower corners of the box are defined with ! 1053: button one. Any objects whose first point lies within the box ! 1054: become members of the family and are connected with dashed ! 1055: lines if the ``markers'' option is on (basic menu). A family ! 1056: is manipulated as a unit. ! 1057: .hD ! 1058: user oper ! 1059: .LP ! 1060: Used to incorporate output from a ! 1061: .UX ! 1062: command on the screen. ! 1063: There is no way to provide standard input but arguments ! 1064: are passed. ! 1065: Click button one over the area where the output should appear. ! 1066: Type the command and hit two returns to terminate the input. ! 1067: The output from the command is printed on the screen. ! 1068: Typical use is for commands like ``date'', ``who'', etc. ! 1069: If PED thinks that incorporation of the command output into ! 1070: a PED file may cause problems (memory overflow for example) ! 1071: it will cancel the operation. ! 1072: .hD ! 1073: fixsz(t) ! 1074: .LP ! 1075: Prevents scaling of characters with the drawing. Scaling may be ! 1076: restored by executing the command a second time. When used ! 1077: it saves terminal memory since only one font is stored. It is ! 1078: also desirable in its own right since many users do not like ! 1079: scaling of text. ! 1080: .RE ! 1081: .hD ! 1082: reshape ! 1083: .LP ! 1084: Reshape allows you to change the shape of objects. ! 1085: .RS ! 1086: .hD ! 1087: formal ! 1088: .LP ! 1089: Clicking button one over any object will ! 1090: straighten all lines of the object that are almost completely ! 1091: vertical or horizontal as ! 1092: described in section 5. ! 1093: .hD ! 1094: spline(t) ! 1095: .LP ! 1096: Convert a polygon into a spline controlled by the polygon or ! 1097: convert a spline into its controlling polygon. ! 1098: .hD ! 1099: arrow(t) ! 1100: .LP ! 1101: Clicking button one over the end point of ! 1102: an object will add an arrow. Arrows cannot be added to circles ! 1103: All arrows must be at an end point of a line (i.e you cannot ! 1104: add an arrow to the middle of the side of a box. However, for ! 1105: ovals, the arrow is placed along one side of the oval). ! 1106: .hD ! 1107: corner(t) ! 1108: .LP ! 1109: Make a spline have a corner by pointing to one of the vertices ! 1110: of its controlling polygon. If there is already a corner there ! 1111: make the spline smooth. ! 1112: .hD ! 1113: mv point ! 1114: .LP ! 1115: Clicking button one over any point on a object (except circles) ! 1116: moves the point to a location specified by a second click of ! 1117: button one. This is useful in reshaping splines and creating ! 1118: distorted boxes and ovals. ! 1119: .hD ! 1120: del pnt ! 1121: .LP ! 1122: Clicking button one over any point removes the point and reshapes ! 1123: the object accordingly (i.e a rectangle becomes a triangle). ! 1124: Circles cannot be used. ! 1125: .hD ! 1126: insrt pnt ! 1127: .LP ! 1128: This command inserts a point between two points of an object ! 1129: (except circles). Click button one over any point on a object. ! 1130: Then select a point where the inserted point will lie. ! 1131: Finally, select the terminating point of any line drawn from ! 1132: the first point. The line on the object is removed and two new ! 1133: lines are created joining the three points selected. ! 1134: .hD ! 1135: close ! 1136: .LP ! 1137: Click button one over any open point of a spline or polygon ! 1138: and the shortest possible line is drawn to the other open ! 1139: end of the object. When you close a spline the first and ! 1140: last points are corners. ! 1141: .hD ! 1142: dis fam ! 1143: .LP ! 1144: Click button one over any member of a family and the family ! 1145: will dissolve. ! 1146: .hD ! 1147: rest fam ! 1148: .LP ! 1149: Click button one over any previous family and it will be ! 1150: restored. CAUTION: Some operations on family members after ! 1151: dissolving may make it impossible to restore it by this ! 1152: command so you will have to use the make family command ! 1153: again. ! 1154: .hD ! 1155: undo ! 1156: .LP ! 1157: Click button one over an object to undo the last command ! 1158: performed on the object. You MUST select undo immediately ! 1159: after executing the command you wish to undo. ! 1160: .RE ! 1161: .hD ! 1162: refine ! 1163: .LP ! 1164: Assorted commands for changing the form of objects. (They would ! 1165: not fit all in the reshape menu.) ! 1166: .RS ! 1167: .hD ! 1168: edit text ! 1169: .LP ! 1170: Edit a text object selected by button one. A copy of the text ! 1171: is displayed on the top of the screen. ! 1172: Newlines are represented by three horizontal lines or whatever ! 1173: other symbol your DMD uses for control characters. ! 1174: If the object has more characters than what can be fitted in the ! 1175: top line of the screen the command is canceled. (It is ! 1176: suggested that you use a text editor to edit large blocks of ! 1177: text. PED files are ASCII and can be edited by any text editor such as ! 1178: .I ed ! 1179: or ! 1180: .I sam .) ! 1181: Button one is used to select a position within the text. ! 1182: A cursor appears in the selected position. ! 1183: Insert by typing or delete with backspaces. End an ! 1184: insert or delete with a return. Press button two or three to ! 1185: terminate the command. ! 1186: .hD ! 1187: adjt(CRL) ! 1188: .LP ! 1189: Allows adjustment of text either left, center or right. ! 1190: Text is initially left adjusted. Click button one over the ! 1191: object and it will center. A second click will right adjust. ! 1192: Successive clicks continue the pattern Left, Center, Right. ! 1193: After such an operation all new text is entered in the ! 1194: selected mode. ! 1195: .hD ! 1196: psize ! 1197: .LP ! 1198: Set point size for text. Select a text object with button one. A ! 1199: cursor appears on the top of the screen. Type a point size and ! 1200: return and the text will be adjusted to the selected point size. ! 1201: All successive text uses that point size. Cancel the command ! 1202: by hitting return. ! 1203: .hD ! 1204: what size ! 1205: .LP ! 1206: It prints the pointsize for the selected object. ! 1207: .hD ! 1208: dashed(t) ! 1209: .LP ! 1210: Select an object with button one and the object is ! 1211: composed of dashed lines. Circles cannot be made dashed. ! 1212: .hD ! 1213: double(t) ! 1214: .LP ! 1215: Select an object with button one and the object is composed ! 1216: of double lines. Circles, ovals and splines cannot be made ! 1217: double. The double lines WILL NOT appear in the local mode ! 1218: (i.e. ``bring in'') but only on ``view host.'' ! 1219: .hD ! 1220: heavy(t) ! 1221: .LP ! 1222: Select an object with button one and the object is composed ! 1223: of heavy lines. Circles, ovals and splines cannot be made ! 1224: heavy. The heavy lines WILL NOT appear in the local mode ! 1225: (i.e. ``bring in'') but only on ``view host.'' ! 1226: .hD ! 1227: isplin(t) ! 1228: .LP ! 1229: Plot the points of a polygon using an interpolating spline. ! 1230: The interpolant WILL NOT appear in the local mode ! 1231: (i.e. ``bring in'') but only on ``view host.'' ! 1232: .hD ! 1233: fix ! 1234: .LP ! 1235: Select (with button one) an object with double or heavy lines ! 1236: or an interpolating spline (isplin). The object display will ! 1237: become effective not only under the `view host' mode, ! 1238: but also under the `local' mode. ! 1239: However the original object description will be lost. ! 1240: .hD ! 1241: user oper ! 1242: .LP ! 1243: Allows execution of a host ! 1244: .UX ! 1245: command defined using the ``type ! 1246: comm'' option ``u'' or a command defined now. You must select an ! 1247: object with button 1. If a command has been defined it will ! 1248: be executed using the object as input. Otherwise you will be ! 1249: prompted for the name. The object is used as input for the ! 1250: command if it expects one. See the user's manual for more ! 1251: details. ! 1252: .hD ! 1253: undo ! 1254: .LP ! 1255: Undoes the previous command if you point to the object where ! 1256: that command was applied. ! 1257: .RE ! 1258: .hD ! 1259: remote ! 1260: .LP ! 1261: Commands to perform editing on the host. All commands ! 1262: request that you enclose the desired area to be edited ! 1263: within a rectangle. ! 1264: .RS ! 1265: .hD ! 1266: delete ! 1267: .LP ! 1268: Using button one, draw a rectangle around the objects to be ! 1269: deleted. Confirm by pressing button 3. ! 1270: .hD ! 1271: copy ! 1272: .LP ! 1273: Using button one, draw a rectangle around the objects to be ! 1274: copied. Use button one to select the location of the copied ! 1275: object. ! 1276: .hD ! 1277: move ! 1278: .LP ! 1279: Using button one, draw a rectangle around the objects to be ! 1280: moved. Use button one to select the location of the moved ! 1281: object. ! 1282: .hD ! 1283: read ! 1284: .LP ! 1285: Using button one, draw a rectangle indicating the region where ! 1286: the read in file will reside. Once the rectangle is defined, ! 1287: type in the file name and hit return. The file will be scaled ! 1288: to fit in the rectangle ! 1289: .hD ! 1290: write ! 1291: .LP ! 1292: Using button one, draw a rectangle around the objects to be ! 1293: written to the file. Once the rectangle is define, type a ! 1294: file name and hit return. All objects within the rectangle ! 1295: are written to the file. ! 1296: .hD ! 1297: formal ! 1298: .LP ! 1299: Using button one, draw a rectangle around the objects to be ! 1300: formalized (beautified). Click button one again to initiate ! 1301: the procedure. See the user's manual for details about the ! 1302: formalization procedure. ! 1303: .hD ! 1304: xpand ! 1305: .LP ! 1306: Using button one, draw a rectangle around the objects to be ! 1307: expanded. Click button one to initiate the expansion. Objects ! 1308: expand by a factor of 1.25. ! 1309: .hD ! 1310: shrink ! 1311: .LP ! 1312: Using button one, draw a rectangle around the objects to be ! 1313: shrunk. Click button one to initiate the shrink command. Objects ! 1314: shrink by a factor of 0.8. ! 1315: .hD ! 1316: v-flip ! 1317: .LP ! 1318: Using button one, draw a rectangle around the objects to be ! 1319: vertically flipped. Click button one to initiate the vertical ! 1320: flip. ! 1321: .hD ! 1322: h-flip ! 1323: .LP ! 1324: Using button one, draw a rectangle around the objects to be ! 1325: horizontally flipped. Click button one to initiate the ! 1326: horizontal flip. ! 1327: .RE ! 1328: .hD ! 1329: shade ! 1330: .LP ! 1331: This menu is used to shade objects. Select a shade with ! 1332: button one. Your mouse will become a box that resembles ! 1333: the selected shade. Click button one over any object that ! 1334: you want filled in with that shade. To remove a shade, ! 1335: point to `unfill' and then to an object with shading. ! 1336: .hD ! 1337: color ! 1338: .LP ! 1339: Assign this color to the object selected. There is no visible ! 1340: effect on the DMD terminal, unless you have set the markers option. ! 1341: Then the color name appears next to the object (except for the ! 1342: color black). The assignment of color becomes meaningful when ! 1343: you display a PED file on a color device. ! 1344: .EQ ! 1345: delim !! ! 1346: .EN ! 1347: .ds aA \s+2\(->\s-2 ! 1348: .SH ! 1349: Appendix B: PED File Format ! 1350: .PP ! 1351: The following is a specification of the format of ! 1352: .I ped ! 1353: files. This information is useful for writing programs to perform ! 1354: one of the following functions: ! 1355: (a) display ! 1356: .I ped ! 1357: files on new devices; ! 1358: (b) create illustrations that can be edited by ! 1359: .I ped ! 1360: and included in ! 1361: .I troff ! 1362: documents by ! 1363: .I tped. ! 1364: .PP ! 1365: It is also a formal definition of ! 1366: .I ped ! 1367: objects. ! 1368: The specification is given as a production system. ! 1369: Semantics are given in ! 1370: .I italics . ! 1371: Nonterminals start with ! 1372: .CW $ , ! 1373: .CW % , ! 1374: .CW & , ! 1375: or ! 1376: .CW . ! 1377: and the following ! 1378: conventions are observed: ! 1379: .TS ! 1380: center; ! 1381: cfI cfI ! 1382: lFCW l. ! 1383: Prefix Interpretation ! 1384: % number (integer or floating point), ! 1385: & character string ! 1386: \&. single character ! 1387: .TE ! 1388: All other symbols are terminals. ! 1389: .SH ! 1390: Initial Action ! 1391: .TS ! 1392: delim(!!); ! 1393: lFCW lFCW. ! 1394: File \*(aA o 8i \fIopen version\fP ! 1395: \^ r %N %N %N %N !x sub "min"! !y sub "min"! !x sub "max"! !y sub "max"! ! 1396: \^ $$ \fIobject list\fP ! 1397: \^ e ! 1398: .TE ! 1399: .SH ! 1400: Creation of Object List ! 1401: .TS ! 1402: lFCW lFCW. ! 1403: $$ \*(aA $Q $$ ! 1404: \^ $Q ! 1405: .TE ! 1406: .SH ! 1407: Creation of Objects ! 1408: .TS ! 1409: lFCW lFCW. ! 1410: $Q \*(aA [ $HF $$ ] \fIfamily\fP ! 1411: \^ [ $H $P ] \fIpolygon\fP ! 1412: \^ [ $H $U ] \fIfilled polygon\fP ! 1413: \^ [ $H $S ] \fIspline\fP ! 1414: \^ [ $HT $T ] \fItext\fP ! 1415: \^ [ $H $C ] \fIcircle\fP ! 1416: .TE ! 1417: .SH ! 1418: Object Headers ! 1419: .TS ! 1420: lFCW lFCW. ! 1421: $H \*(aA j %N \fIcolor\fP ! 1422: \^ h %N \fIpoint size\fP ! 1423: \^ i .N \fIfilled objects: drawing mode\fP ! 1424: \^ i T.N \fIfilled objects: texture\fP ! 1425: \^ k.A .N \fIdrawing mode\fP ! 1426: _ ! 1427: $HF \*(aA j %N \fIignored\fP ! 1428: \^ h %N \fIignored\fP ! 1429: \^ f %N %N \fIundefined point\fP ! 1430: _ ! 1431: $HT \*(aA j %N \fIcolor\fP ! 1432: \^ h %N \fIpoint size\fP ! 1433: \^ i P%N \fIpoint size (obsolete)\fP ! 1434: \^ i F&N \fIfont\fP ! 1435: _ ! 1436: \&.A \*(aA a \fIarrow on first point\fP ! 1437: \^ b \fIarrow on last point\fP ! 1438: \^ c \fIarrow on both points\fP ! 1439: \^ NULL \fIno arrow\fP ! 1440: .TE ! 1441: .SH ! 1442: Start of Outlines ! 1443: .TS ! 1444: lFCW lFCW. ! 1445: $P \*(aA p %N %N ! 1446: \^ p %N %N $R ! 1447: \^ P %N %N $R ! 1448: _ ! 1449: $S \*(aA s %N %N $R ! 1450: \^ S %N %N $R ! 1451: _ ! 1452: $U \*(aA Q %N %N $R ! 1453: .TE ! 1454: .SH ! 1455: Continuation of Outline ! 1456: .TS ! 1457: lFCW lFCW. ! 1458: $R \*(aA .V %N %N ! 1459: \^ .V %N %N $R ! 1460: _ ! 1461: \&.V \*(aA v \fIconnected vertex\fP ! 1462: \^ w ! 1463: \^ x \fIunconnected vertex\fP ! 1464: \^ X \fIsame as\fP w \fIand\fP x ! 1465: .TE ! 1466: .LP ! 1467: .CW v ! 1468: stands for a simple vertex connected to the previous one. ! 1469: .CW w ! 1470: is the same as ! 1471: .CW v ! 1472: but in the case of splines is ! 1473: counted as multiple and creates a corner in the curve. ! 1474: \f(CWx\fP is a simple vertex NOT connected to the previous one. ! 1475: (The result of a ! 1476: .I link ! 1477: operation.) ! 1478: .SH ! 1479: Circle ! 1480: .TS ! 1481: lFCW lFCW. ! 1482: $C \*(aA c %xc %yc %rad ! 1483: .TE ! 1484: .SH ! 1485: Text ! 1486: .TS ! 1487: lFCW lFCW. ! 1488: $T \*(aA m %N %N $TT ! 1489: $TT \*(aA u .M&T $TR ! 1490: _ ! 1491: $TR \*(aA u &T $TR ! 1492: \^ t &T ! 1493: _ ! 1494: \&.M \*(aA L \fIleft adjusted text\fP ! 1495: \^ C \fIcentered text\fP ! 1496: \^ R \fIright adjusted text\fP ! 1497: .TE ! 1498: .LP ! 1499: Valid numbers for color are 0 to 7. Valid characters for texture ! 1500: filling are E through P. Valid characters for drawing mode are ! 1501: .TS ! 1502: center; ! 1503: lFCW l. ! 1504: s solid ! 1505: d dashed ! 1506: t double ! 1507: h heavy ! 1508: i interpolating spline ! 1509: .TE ! 1510: .PP ! 1511: The specification is rather awkward at points for historical reason. ! 1512: Originally, we had hoped that the ! 1513: .I ped ! 1514: file format would be the same as that for the PLOT(5) metafile. ! 1515: This goal was eventually abandoned but by that time there were too many ! 1516: .I ped ! 1517: files around to allow a drastic redesign of the format. ! 1518: .SH ! 1519: Appendix C: Extensions of TROFF and TROFF postprocessors ! 1520: needed for expanding the compact output of TPED ! 1521: .PP ! 1522: .I Troff ! 1523: has two primitives for drawing graphics: ! 1524: .CW \eD ! 1525: and ! 1526: .CW \eX . ! 1527: In both cases, the next letter specifies an action. ! 1528: If ! 1529: .I troff ! 1530: does not understand this letter, it simply passes the whole construct through ! 1531: to its output so that a post-processor can deal with it. ! 1532: This Appendix details the constructs ! 1533: needed to interpret the compact output of ! 1534: .I tped. ! 1535: .LP ! 1536: .CW ! 1537: \eD'p dx dy ...' ! 1538: .R ! 1539: a polygonal line. ! 1540: .LP ! 1541: .CW ! 1542: \eD'q dx dy ...' ! 1543: .R ! 1544: a spline ! 1545: .PP ! 1546: In either case closure of the curve must be made explicit by repeating the ! 1547: first point for a polygon and the first two for a spline. Multiplicity ! 1548: of a spline point is achieved by adding a pair 0 0 after the point. Thus ! 1549: the current ! 1550: .P1 ! 1551: \eD'~ dx dy ...' ! 1552: .P2 ! 1553: is equivalent to ! 1554: .P1 ! 1555: \eD'q 0 0 dx dy ... 0 0' ! 1556: .P2 ! 1557: .LP ! 1558: .CW \eX\'P\fIoption\fP' ! 1559: is used to supply information about the way a curve ! 1560: will be plotted. Currently the following options are recognized ! 1561: .de XX ! 1562: .IP \f(CW\\$1\f1 10 ! 1563: .. ! 1564: .XX \eX'Pd' ! 1565: dashed line (or spline) ! 1566: .XX \eX'Pd' ! 1567: dashed line ! 1568: .XX \eX'Ps' ! 1569: solid line ! 1570: .XX \eX'Pf' ! 1571: do not plot the contours but collect them to create a region ! 1572: with interior filled by texture. ! 1573: .XX \eX'Pg' ! 1574: same as previous but the contour of the regions will also be plotted. ! 1575: .XX \eX'Pe\fIS\fP' ! 1576: do the actual scan conversion of collected contours using a texture ! 1577: specified by the character S. (The textures of \fIped\fP ! 1578: are described in order by the characters E to P.)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.