Provided by: ivtools-dev_2.0.11d.a1-1build4_amd64 bug

NAME

       PointObj,  LineObj,  BoxObj,  MultiLineObj,  FillPolygonObj,  Extent - helper classes that
       manage geometric information for structured graphics

SYNOPSIS

       #include <Unidraw/Graphic/geomobjs.h>

DESCRIPTION

       Unidraw defines several helper  classes  that  store  and  manage  geometric  information.
       Structured  graphics  objects  may  use  these  helper classes to support their semantics.
       PointObj stores a point, LineObj stores two points, and MultiLineObj stores any number  of
       points.  BoxObj  and  FillPolygonObj define rectangular and polygonal areas, respectively.
       Extent stores extent information, that is, the lower left corner and center of a  bounding
       box plus a fixed amount of extra space around the bounding box.  All these classes provide
       operations for computing geometric information.

POINTOBJ PUBLIC OPERATIONS

       PointObj(Coord = 0, Coord = 0)
       PointObj(PointObj*)
              Construct a PointObj, supplying either two Coords or another  PointObj  to  specify
              the instance's coordinates, which are stored in its _x and _y public members.

       float Distance(PointObj&)
              Return the distance between this and the given PointObj.

LINEOBJ PUBLIC OPERATIONS

       LineObj(Coord = 0, Coord = 0, Coord = 0, Coord = 0)
       LineObj(LineObj*)
              Construct  a  LineObj,  supplying either two coordinate pairs or another LineObj to
              specify the instance's endpoints, which are  stored  in  its  _p1  and  _p2  public
              members.

       boolean Contains(PointObj&)
       boolean Intersects(LineObj&)
              Return  whether  this  contains  the  given  point  and  intersects the given line,
              respectively.

       int Same(PointObj& p1, PointObj& p2)
              A helper function used in Intersects. Same returns a positive value if  p1  and  p2
              fall on the same side of the line, 0 if both points fall on the line, or a negative
              value if the points are on opposite sides of the line.

BOXOBJ PUBLIC OPERATIONS

       BoxObj(Coord = 0, Coord = 0, Coord = 0, Coord = 0)
       BoxObj(BoxObj*)
              Construct a BoxObj, supplying either two coordinate  pairs  or  another  BoxObj  to
              specify  the  instance's bottom-left and top-right corners, which are stored in its
              _left, _bottom, _right, and _top public members.

       boolean Contains(PointObj&)
       boolean Intersects(BoxObj&)
       boolean Intersects(LineObj&)
              Return whether this contains the given point and intersects the given box or  line,
              respectively.

       BoxObj operator - (BoxObj&)
       BoxObj operator + (BoxObj&)
              Compute  the intersection (-) or union (+) of this and the given box, returning the
              result.  These operations do not affect this or their argument.

       boolean Within(BoxObj&)
              Return true if this falls completely within the given box.  Within will also return
              true if the boxes are identical.

MULTILINEOBJ PUBLIC OPERATIONS

       MultiLineObj(Coord* = nil, Coord* = nil, int = 0)
              Create a MultiLineObj, optionally supplying coordinate arrays (and their size) that
              define the vertices of the multiline. The MultiLineObj does not copy  these  arrays
              but  stores  them directly. The MultiLineObj stores this information in its _x, _y,
              and _count public members.

       void GetBox(BoxObj&)
              Calculate the bounding box circumscribing the MultiLineObj's vertices and store  it
              in the argument.

       boolean Contains(PointObj&)
       boolean Intersects(BoxObj&)
       boolean Intersects(LineObj&)
              Return  whether this contains the given point and intersects the given box or line,
              respectively.

       boolean Within(BoxObj&)
              Return true if this falls completely within the MultiLineObj's bounding box. Within
              will also return true if the boxes are identical.

       void SplineToMultiLine(Coord* cpx, Coord* cpy, int count)
       void ClosedSplineToMultiLine(Coord* cpx, Coord* cpy, int count)
              Linearize  the  open  or closed B-Spline defined by the given set of control points
              and store the result in this.  These operations  store  the  linearized  result  in
              internal  buffers  and  assign the addresses of these buffers to _x and _y; they do
              not delete _x and _y if they are non-nil prior to assignment.

MULTILINEOBJ PROTECTED OPERATIONS

       void GrowBuf()
              Increase the size of the internal buffers used to store linearized splines.

       boolean CanApproxWithLine(
           double x0, double, y0,
           double x1, double y1,
           double x2, double y2
       )
              Return whether two connected line segments defined by the given three points can be
              approximated visually with a single line between the endpoints.

       void AddLine(double x0, double y0, double x1, double y1)
              Add a line to the internal buffer of vertices.

       void AddBezierArc(
           double x0, double y0, double x1, double y1,
           double x2, double y2, double x3, double y3
       )
              Add  lines approximating the appearance of a Bezier arc defined by the given points
              to the internal buffer of vertices.

       void CalcSection(
           Coord cminus1x, Coord cminus1y, Coord cx, Coord cy,
           Coord cplus1x, Coord cplus1y, Coord cplus2x, Coord cplus2y
       )
              Add a Bezier arc to the internal buffer of vertices based on a series  of  four  B-
              spline control points, the one before and the two after (cx, cy).

FILLPOLYGONOBJ PUBLIC OPERATIONS

       FillPolygonObj(Coord* = nil, Coord* = nil, int = 0)
              Create  a  new FillPolygonObj, optionally specifying its vertices.  If vertices are
              supplied, then  the  constructor  uses  Normalize  (described  below)  to  store  a
              normalized  set  of vertices in the FillPolygonObj's _normx, _normy, and _normCount
              public members.  FillPolygonObj is a subclass of MultiLineObj; thus it  stores  the
              constructor arguments in its _x, _y, and _count public members.

       virtual ~FillPolygonObj()
              The destructor deletes the _normx and _normy arrays.

       boolean Contains(PointObj&)
       boolean Intersects(BoxObj&)
       boolean Intersects(LineObj&)
              Return  whether this contains the given point and intersects the given box or line,
              respectively.

FILLPOLYGONOBJ PROTECTED OPERATIONS

       void Normalize()
              Copy the vertices defined by _x, _y, and _count into _normx, _normy, and _normCount
              such  that  (_normx[0],  _normy[0])  is  the lower-leftmost vertex and there are no
              redundant vertices.

EXTENT PUBLIC OPERATIONS

       Extent(
           float left = 0, float bottom = 0,
           float cx = 0, float cy = 0, float tol = 0
       )

       Extent(Extent&)
              Construct a new Extent, optionally supplying its parameters explicitly or providing
              a  existing  Extent  to  copy.   The  parameters  are stored in the Extent's _left,
              _bottom, _cx, _cy, and _tol public members.

       boolean Undefined()
              Return whether the extent is undefined, that is, if (_left, _bottom) and (_cx, _cy)
              are the same point.

       boolean Within(Extent&)
              Return  true  if the given extent circumscribes this.  Within will also return true
              if the extents are identical.

       void Merge(Extent&)
              Enlarge this extent to subsume area of the given extent.

SEE ALSO

       Graphic(3U)