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)