home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Examples / AppKit / Lines / UserPath.h < prev    next >
Text File  |  1997-01-12  |  3KB  |  68 lines

  1. /* 
  2.  * UserPath is an object which facilitates the use of DPS user paths. You can create a user path,
  3.  * then load it with paths and draw the paths over and over. Here's an example:
  4.  *
  5.  * UserPath *userPath = [[UserPath alloc] init];
  6.  * [userPath beginUserPath:YES];       // initialize user path and cache
  7.  * [userPath moveto:0.0 :0.0];         // add moveto to userpath; update bounding box
  8.  * [userPath rlineto:0.0 :100.0);      // add rlineto to path; update bounding box
  9.  * [userPath rlineto:100.0 :0.0);      // add rlineto to path; update bounding box
  10.  * [userPath rlineto:0.0 :-100.0);     // add rlineto to path; update bounding box
  11.  * [userPath closepath];               // close path
  12.  * [userPath endUserPath:dps_stroke];  // close user path and specify operator
  13.  * [userPath sendUserPath];
  14.  *
  15.  * As you will note, the set of routines manage the allocation and growth of
  16.  * the operator and operand arrays, as well as the calculation of the bounding
  17.  * box. A user path created via these methods may be optionally cached down
  18.  * at the window server, or repeatedly sent down.
  19.  */
  20.  
  21. #import <Foundation/NSObject.h>
  22. #import <AppKit/dpsclient.h>
  23.  
  24. @interface UserPath : NSObject {
  25.     float          *points;
  26.     int             numberOfPoints;
  27.     char           *ops;
  28.     NSPoint         cp;
  29.     int             numberOfOps;
  30.     int             max;
  31.     float           bbox[4];
  32.     int             opForUserPath;
  33.     BOOL            ping;
  34. }
  35.  
  36. /* Creation/destruction */
  37. - (id)init;                /* Init the path. Can reuse it many times (with multiple begin/end) */
  38. - (void)dealloc;
  39.  
  40. /* Public methods */
  41. - (void)beginUserPath:(BOOL)cache;    /* Start a new path; if cache=YES, the path is saved in the server */
  42. - (void)endUserPath:(int)op;        /* Finish off the path with the specified drawing operation */
  43. - (void)sendUserPath;            /* Draw the path */
  44. - (void)setSynchronous:(BOOL)flag;    /* If flag = YES, the path is sent down synchronously, for debugging */
  45. - (BOOL)isSynchronous;
  46.  
  47. /* Path creation methods */
  48. - (void)moveto:(float)x :(float)y;
  49. - (void)rmoveto:(float)x :(float)y;
  50. - (void)lineto:(float)x :(float)y;
  51. - (void)rlineto:(float)x :(float)y;
  52. - (void)curveto:(float)x1 :(float)y1 :(float)x2 :(float)y2 :(float)x3 :(float)y3;
  53. - (void)rcurveto:(float)dx1 :(float)dy1 :(float)dx2 :(float)dy2 :(float)dx3 :(float)dy3;
  54. - (void)arc:(float)x :(float)y :(float)r :(float)ang1 :(float)ang2;
  55. - (void)arcn:(float)x :(float)y :(float)r :(float)ang1 :(float)ang2;
  56. - (void)arct:(float)x1 :(float)y1 :(float)x2 :(float)y2 :(float)r;
  57. - (void)closepath;
  58.  
  59. /* Internal methods */
  60. - (void)growUserPath;
  61. - (void)checkBoundingBox:(float)x :(float)y;
  62. - (void)addPts:(float)x :(float)y;
  63. - (void)addOp:(int)op;
  64. - (void)add:(int)op :(float)x :(float)y;
  65.  
  66. @end
  67.  
  68.