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 man-
age 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 coor-
dinates, 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 coordi-
nate 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(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 mem-
bers.
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 coordi-
nate arrays (and their size) that define the ver-
tices 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 Mul-
tiLineObj'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)
result in this. These operations store the lin-
earized 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 visu-
ally 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 FillPoly-
gonObj's _normx, _normy, and _normCount public mem-
bers. FillPolygonObj is a subclass of MultiLi-
neObj; thus it stores the constructor arguments in
its _x, _y, and _count public members.
virtual ~FillPolygonObj()
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)
Man(1) output converted with
man2html