Provided by: ivtools-dev_2.0.11d.a1-3build1_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)