Rubband - rubberbanding graphical objects


SYNOPSIS

       #include <InterViews/rubband.h>
       #include <InterViews/rubcurve.h>
       #include <InterViews/rubgroup.h>
       #include <InterViews/rubline.h>
       #include <InterViews/rubrect.h>
       #include <InterViews/rubverts.h>


DESCRIPTION

       Rubband  is  the base class for a set of classes that pro-
       vide graphical feedback to a user  during  an  interactive
       operation such as sizing a rectangle.  A rubberband varies
       in appearance as its tracking point changes.  A rubberband
       is  not  an interactor itself; interactors use rubberbands
       to provide animated effects.  Because rubberbands are  not
       interactors,  rubberband  constructors  must be passed the
       painter and canvas to use for drawing.


PUBLIC OPERATIONS

       RubberLine(
           Painter*, Canvas*, Coord fx, fy, mx, my, offx = 0,
              offy = 0
       )
              A  rubber  line  stretches  to  follow the tracking
              point while its other endpoint stays tied down.

       RubberAxis(
           Painter*, Canvas*, Coord fx, fy, mx, my, offx = 0,
              offy = 0
       )
              A rubber axis stretches either horizontally or ver-
              tically to follow  the  tracking  point  while  its
              other endpoint stays tied down.  One endpoint stays
              fixed while the other moves along either the  hori-
              zontal or vertical axis, whichever is closer to the
              tracking point.

       SlidingLine(
           Painter*, Canvas*, Coord x0, y0, x1, y1, rfx, rfy,
           Coord offx = 0, offy = 0
       )
              A sliding line slides around without  changing  its
              length  or angle as the tracking point moves around
              a reference point.

       RotatingLine(
           Painter*, Canvas*, Coord x0, y0, x1, y1, rfx, rfy,
           Coord offx = 0, offy = 0
       )
              A rotating line rotates around  (cx, cy)  based  on
              tracking point.

       RubberRect(
           Painter*, Canvas*, Coord fx, fy, mx, my, offx = 0,
              offy = 0
       )
              A rubber rectangle stretches to follow the  tacking
              point while its opposite corner stays tied down.

       SlidingRect(
           Painter*, Canvas*, Coord x1, y1, x2, y2, rfx, rfy,
           Coord offx = 0, offy = 0
       )
              A  sliding rectangle slides around the screen with-
              out changing its side or orientation as the  track-
              ing point moves around a reference point.

       ScalingRect(
           Painter*, Canvas*, Coord x1, y1, x2, y2, cx, cy,
           Coord offx = 0, offy = 0
       )
              A  scaling  rectangle scales equally in both dimen-
              sions about (cx, cy) to keep one edge  intersecting
              the tracking point.

       RotatingRect(
           Painter*, Canvas*, Coord x1, y1, x2, y2, cx, cy, rfx,
              rfy,
           Coord offx = 0, offy = 0
       )
              A rotating rectangle rotates about  (cx, cy)  based
              on  the  radius from (cx, cy) to (rfx, rfy) and the
              radius from (cx, cy) to the tracking point.

       StretchingRect(
           Painter*, Canvas*, Coord x1, y1, x2, y2, Side ts,
           Coord offx = 0, offy = 0
       )
              A stretching rectangle's tracking side follows  the
              tracking point while the opposite side stays fixed.
              The side can be one of LeftSide, RightSide, Bottom-
              Side, or TopSide.

       RubberCircle(
           Painter*, Canvas*, Coord cx, cy, rx, ry, offx = 0,
              offy = 0
       )
              A rubber circle's radius varies with the  magnitude
              of the tracking point's distance from (cx, cy).

       RubberEllipse(
           Painter*, Canvas*, Coord cx, cy, rx, ry, offx = 0,
              A rubber ellipse's horizontal  and  vertical  radii
              vary  with  the  magnitude  of the tracking point's
              distance from (cx, cy).

       RubberSpline(
           Painter*, Canvas*, Coord x[], y[], int n, pt,
           Coord offx = 0, offy = 0
       )
       RubberClosedSpline(
           Painter*, Canvas*, Coord x[], y[], int n, pt,
           Coord offx = 0, offy = 0
       )
              A rubber  spline  is  the  section  of  a  B-spline
              defined  by  n control points that changes shape as
              the control point indexed  by  pt  is  set  to  the
              tracking point.

       RubberHandles(
           Painter*, Canvas*, Coord x[], y[], int n, pt, size,
           Coord offx = 0, offy = 0
       )
              A  rubber handles object is a set of filled squares
              centered about each point in the list.   The  point
              index by pt follows the tracking point.

       SlidingPointList(
           Painter*, Canvas*, Coord x[], y[], int n, pt, Coord
              rfx, rfy,
           Coord offx = 0, offy = 0
       )
              A sliding point list slides around the screen with-
              out changing its appearance as the  tracking  point
              moves around a reference point.

       SlidingLineList(
           Painter*, Canvas*, Coord x[], y[], int n, pt, Coord
              rfx, rfy,
           Coord offx = 0, offy = 0
       )
              A  sliding line list slides around the screen with-
              out changing the appearance of its connected  lines
              as the tracking point moves around (rfx, rfy).

       ScalingLineList(
           Painer*, Canvas*, Coord x[], Coord y[], int n,
           Coord cx, cy, rfx, rfy, offx = 0, offy = 0
       )
              A  scaling  line  list scales a list of lines about
              (cx, cy) to  keep  the  line  list's  bounding  box
              intersecting the tracking point.

       RotatingLineList(
           Coord cx, cy, rfx, rfy, offx = 0, offy = 0
       )
              A  rotating line list rotates a list of lines about
              (cx, cy) based on the angle between the radius from
              (cx, cy) to (rfx, rfy) and the radius from (cx, cy)
              to the tracking point.

       GrowingVertices(
           Painter*, Canvas*, Coord x[], y[], int n,
           int pt = -1, int handleSize = -1
       )
       GrowingMultiLine(
           Painter*, Canvas*, Coord x[], y[], int n,
           int pt = -1, int handleSize = -1
       )
       GrowingPolygon(
           Painter*, Canvas*, Coord x[], y[], int n,
           int pt = -1, int handleSize = -1
       )
       GrowingBSpline(
           Painter*, Canvas*, Coord x[], y[], int n,
           int pt = -1, int handleSize = -1
       )
       GrowingClosedBSpline(
           Painter*, Canvas*, Coord x[], y[], int n,
           int pt = -1, int handleSize = -1
       )
       virtual void AddVertex(Coord, Coord)
       virtual void RemoveVertex()
              GrowingVertices is an abstract rubberband  contain-
              ing a list of vertices that grows or shrinks dynam-
              ically.  The pt parameter specifies  the  index  of
              the  vertex  that will follow the tracking point; a
              value of -1 specifies a vertex after the  last  one
              in  the  list.   The handleSize parameter specifies
              the size of the handle drawn at each vertex (as  in
              RubberHandles  above); a value of -1 specifies that
              no handles be drawn.

              The AddVertex operation adds a new  vertex  at  the
              tracking  point  to the list and makes the next (or
              last) vertex in the list follow the tracking point.
              RemoveVertex  removes  the  vertex  at the tracking
              point and makes the previous (or first) vertex  the
              new tracking point.  GrowingMultiLine, GrowingPoly-
              gon, GrowingBSpline, and  GrowingClosedBSpline  are
              GrowingVertices  subclasses  that draw a multiline,
              polygon, B-spline,  and  closed  B-spline,  respec-
              tively.

       RubberGroup(Painter*, Canvas*)
       void Append(
           Rubberband* = nil
       )
       void Remove(Rubberband*)
       void RemoveCur()
       void SetCurrent(Rubberband*)
       Rubberband* GetCurrent()
       Rubberband* First()
       Rubberband* Last()
       Rubberband* Next()
       Rubberband* Prev()
       boolean IsEmpty()
       boolean AtEnd()
              A RubberGroup composes other rubberbands, providing
              operations for including, excluding, and traversing
              its children. RubberGroups are useful for combining
              the behavior of several rubberbands into one, elim-
              inating  the need to call Track on multiple rubber-
              bands. The RubberGroup's SetCanvas  and  SetPainter
              operations set the children's canvas and painter as
              well as the RubberGroup's, but the children do  not
              otherwise  inherit  the group's canvas and painter.
              The Track operation calls Track on each child  with
              the same parameters.

       virtual void Draw()
       void Redraw()
       virtual void Erase()
              Explicitly  draw, redraw, and erase the rubberband.
              Multiple calls to Draw without an intervening Erase
              will  only draw the rubberband once.  Redraw forces
              the rubberband to be drawn.  Since rubberbands  are
              drawn in XOR mode, Redraw will erase the rubberband
              every other time it is called.  These functions are
              used  only  on  occasion, for example, when part of
              the screen is erased while a rubberband is visible.
              The  Track  function  is  normally used to draw the
              rubberband in response to mouse input.

       virtual void Track(Coord x, Coord y)
              Erase the rubberband and redraw it  using  the  new
              tracking point.

       void GetOriginal(Coord& x1, Coord& y2, Coord& x2, Coord&
              y2)
       void GetCurrent(Coord& x1, Coord& y2, Coord& x2, Coord&
              y2)
              GetOriginal  obtains  the original points specified
              for the rubberband.  GetCurrent obtains the current
              points based on the most recent call to Track.  The
              meaning of the points depends on the kind  of  rub-
              berband.   For lines, the points are the endpoints;
              for rectangles, the points  are  opposite  corners;

       virtual void SetPainter(Painter*)
       Painter* GetPainter()
              Explicitly set and get the painter used by the rub-
              berband.  By default, rubberbands use a copy of the
              painter passed to their constructor.  The user  can
              specify  a  particular  painter to use by passing a
              nil painter to the constructor  and  later  calling
              SetPainter.   N.B.:  the  rubberband  may alter the
              painter specified via SetPainter.

       virtual void SetCanvas(Canvas*)
       Canvas* GetCanvas()
              Explicitly set and get the canvas used by the  rub-
              berband.


SEE ALSO

       Canvas(3I), Painter(3I)



































Man(1) output converted with man2html