tesseract  4.00.00dev
TBOX Class Reference

#include <rect.h>

Public Member Functions

 TBOX ()
 
 TBOX (const ICOORD pt1, const ICOORD pt2)
 
 TBOX (inT16 left, inT16 bottom, inT16 right, inT16 top)
 
 TBOX (const FCOORD pt)
 
bool null_box () const
 
bool operator== (const TBOX &other) const
 
inT16 top () const
 
void set_top (int y)
 
inT16 bottom () const
 
void set_bottom (int y)
 
inT16 left () const
 
void set_left (int x)
 
inT16 right () const
 
void set_right (int x)
 
int x_middle () const
 
int y_middle () const
 
const ICOORD & botleft () const
 
ICOORD botright () const
 
ICOORD topleft () const
 
const ICOORD & topright () const
 
inT16 height () const
 
inT16 width () const
 
inT32 area () const
 
void pad (int xpad, int ypad)
 
void move_bottom_edge (const inT16 y)
 
void move_left_edge (const inT16 x)
 
void move_right_edge (const inT16 x)
 
void move_top_edge (const inT16 y)
 
void move (const ICOORD vec)
 
void move (const FCOORD vec)
 
void scale (const float f)
 
void scale (const FCOORD vec)
 
void rotate (const FCOORD &vec)
 
void rotate_large (const FCOORD &vec)
 
bool contains (const FCOORD pt) const
 
bool contains (const TBOX &box) const
 
bool overlap (const TBOX &box) const
 
bool major_overlap (const TBOX &box) const
 
bool x_overlap (const TBOX &box) const
 
int x_gap (const TBOX &box) const
 
int y_gap (const TBOX &box) const
 
bool major_x_overlap (const TBOX &box) const
 
bool y_overlap (const TBOX &box) const
 
bool major_y_overlap (const TBOX &box) const
 
double overlap_fraction (const TBOX &box) const
 
double x_overlap_fraction (const TBOX &box) const
 
double y_overlap_fraction (const TBOX &box) const
 
bool x_almost_equal (const TBOX &box, int tolerance) const
 
bool almost_equal (const TBOX &box, int tolerance) const
 
TBOX intersection (const TBOX &box) const
 
TBOX bounding_union (const TBOX &box) const
 
void set_to_given_coords (int x_min, int y_min, int x_max, int y_max)
 
void print () const
 
void print_to_str (STRING *str) const
 
void plot (ScrollView *fd) const
 
void plot (ScrollView *fd, ScrollView::Color fill_colour, ScrollView::Color border_colour) const
 
bool Serialize (FILE *fp) const
 
bool DeSerialize (bool swap, FILE *fp)
 

Friends

TBOX & operator+= (TBOX &, const TBOX &)
 
TBOX & operator &= (TBOX &, const TBOX &)
 

Detailed Description

Definition at line 30 of file rect.h.

Constructor & Destructor Documentation

◆ TBOX() [1/4]

TBOX::TBOX ( )
inline

Definition at line 32 of file rect.h.

32  : // empty constructor making a null box
33  bot_left (MAX_INT16, MAX_INT16), top_right (-MAX_INT16, -MAX_INT16) {
34  }
#define MAX_INT16
Definition: host.h:61

◆ TBOX() [2/4]

TBOX::TBOX ( const ICOORD  pt1,
const ICOORD  pt2 
)

Definition at line 32 of file rect.cpp.

35  {
36  if (pt1.x () <= pt2.x ()) {
37  if (pt1.y () <= pt2.y ()) {
38  bot_left = pt1;
39  top_right = pt2;
40  }
41  else {
42  bot_left = ICOORD (pt1.x (), pt2.y ());
43  top_right = ICOORD (pt2.x (), pt1.y ());
44  }
45  }
46  else {
47  if (pt1.y () <= pt2.y ()) {
48  bot_left = ICOORD (pt2.x (), pt1.y ());
49  top_right = ICOORD (pt1.x (), pt2.y ());
50  }
51  else {
52  bot_left = pt2;
53  top_right = pt1;
54  }
55  }
56 }
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
integer coordinate
Definition: points.h:30

◆ TBOX() [3/4]

TBOX::TBOX ( inT16  left,
inT16  bottom,
inT16  right,
inT16  top 
)

Definition at line 64 of file rect.cpp.

66  : bot_left(left, bottom), top_right(right, top) {
67 }
inT16 left() const
Definition: rect.h:68
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
inT16 bottom() const
Definition: rect.h:61

◆ TBOX() [4/4]

TBOX::TBOX ( const FCOORD  pt)
inline

Definition at line 310 of file rect.h.

312  {
313  bot_left = ICOORD ((inT16) floor (pt.x ()), (inT16) floor (pt.y ()));
314  top_right = ICOORD ((inT16) ceil (pt.x ()), (inT16) ceil (pt.y ()));
315 }
int16_t inT16
Definition: host.h:36
float y() const
Definition: points.h:212
float x() const
Definition: points.h:209
integer coordinate
Definition: points.h:30

Member Function Documentation

◆ almost_equal()

bool TBOX::almost_equal ( const TBOX &  box,
int  tolerance 
) const

Definition at line 258 of file rect.cpp.

258  {
259  return (abs(left() - box.left()) <= tolerance &&
260  abs(right() - box.right()) <= tolerance &&
261  abs(top() - box.top()) <= tolerance &&
262  abs(bottom() - box.bottom()) <= tolerance);
263 }
inT16 left() const
Definition: rect.h:68
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
inT16 bottom() const
Definition: rect.h:61

◆ area()

inT32 TBOX::area ( ) const
inline

Definition at line 118 of file rect.h.

118  { // what is the area?
119  if (!null_box ())
120  return width () * height ();
121  else
122  return 0;
123  }
bool null_box() const
Definition: rect.h:46
inT16 height() const
Definition: rect.h:104
inT16 width() const
Definition: rect.h:111

◆ botleft()

const ICOORD& TBOX::botleft ( ) const
inline

Definition at line 88 of file rect.h.

88  { // access function
89  return bot_left;
90  }

◆ botright()

ICOORD TBOX::botright ( ) const
inline

Definition at line 92 of file rect.h.

92  { // ~ access function
93  return ICOORD (top_right.x (), bot_left.y ());
94  }
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
integer coordinate
Definition: points.h:30

◆ bottom()

inT16 TBOX::bottom ( ) const
inline

Definition at line 61 of file rect.h.

61  { // coord of bottom
62  return bot_left.y ();
63  }
inT16 y() const
access_function
Definition: points.h:56

◆ bounding_union()

TBOX TBOX::bounding_union ( const TBOX &  box) const

Definition at line 129 of file rect.cpp.

130  {
131  ICOORD bl; //bottom left
132  ICOORD tr; //top right
133 
134  if (box.bot_left.x () < bot_left.x ())
135  bl.set_x (box.bot_left.x ());
136  else
137  bl.set_x (bot_left.x ());
138 
139  if (box.top_right.x () > top_right.x ())
140  tr.set_x (box.top_right.x ());
141  else
142  tr.set_x (top_right.x ());
143 
144  if (box.bot_left.y () < bot_left.y ())
145  bl.set_y (box.bot_left.y ());
146  else
147  bl.set_y (bot_left.y ());
148 
149  if (box.top_right.y () > top_right.y ())
150  tr.set_y (box.top_right.y ());
151  else
152  tr.set_y (top_right.y ());
153  return TBOX (bl, tr);
154 }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
TBOX()
Definition: rect.h:32
void set_y(inT16 yin)
rewrite function
Definition: points.h:65
integer coordinate
Definition: points.h:30

◆ contains() [1/2]

bool TBOX::contains ( const FCOORD  pt) const
inline

Definition at line 323 of file rect.h.

323  {
324  return ((pt.x () >= bot_left.x ()) &&
325  (pt.x () <= top_right.x ()) &&
326  (pt.y () >= bot_left.y ()) && (pt.y () <= top_right.y ()));
327 }
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
float y() const
Definition: points.h:212
float x() const
Definition: points.h:209

◆ contains() [2/2]

bool TBOX::contains ( const TBOX &  box) const
inline

Definition at line 335 of file rect.h.

335  {
336  return (contains (box.bot_left) && contains (box.top_right));
337 }
bool contains(const FCOORD pt) const
Definition: rect.h:323

◆ DeSerialize()

bool TBOX::DeSerialize ( bool  swap,
FILE *  fp 
)

Definition at line 192 of file rect.cpp.

192  {
193  if (!bot_left.DeSerialize(swap, fp)) return false;
194  if (!top_right.DeSerialize(swap, fp)) return false;
195  return true;
196 }
bool DeSerialize(bool swap, FILE *fp)
Definition: points.cpp:70

◆ height()

inT16 TBOX::height ( ) const
inline

Definition at line 104 of file rect.h.

104  { // how high is it?
105  if (!null_box ())
106  return top_right.y () - bot_left.y ();
107  else
108  return 0;
109  }
inT16 y() const
access_function
Definition: points.h:56
bool null_box() const
Definition: rect.h:46

◆ intersection()

TBOX TBOX::intersection ( const TBOX &  box) const

Definition at line 87 of file rect.cpp.

88  {
89  inT16 left;
90  inT16 bottom;
91  inT16 right;
92  inT16 top;
93  if (overlap (box)) {
94  if (box.bot_left.x () > bot_left.x ())
95  left = box.bot_left.x ();
96  else
97  left = bot_left.x ();
98 
99  if (box.top_right.x () < top_right.x ())
100  right = box.top_right.x ();
101  else
102  right = top_right.x ();
103 
104  if (box.bot_left.y () > bot_left.y ())
105  bottom = box.bot_left.y ();
106  else
107  bottom = bot_left.y ();
108 
109  if (box.top_right.y () < top_right.y ())
110  top = box.top_right.y ();
111  else
112  top = top_right.y ();
113  }
114  else {
115  left = MAX_INT16;
116  bottom = MAX_INT16;
117  top = -MAX_INT16;
118  right = -MAX_INT16;
119  }
120  return TBOX (left, bottom, right, top);
121 }
bool overlap(const TBOX &box) const
Definition: rect.h:345
#define MAX_INT16
Definition: host.h:61
inT16 x() const
access function
Definition: points.h:52
int16_t inT16
Definition: host.h:36
inT16 left() const
Definition: rect.h:68
inT16 y() const
access_function
Definition: points.h:56
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
TBOX()
Definition: rect.h:32
inT16 bottom() const
Definition: rect.h:61

◆ left()

inT16 TBOX::left ( ) const
inline

Definition at line 68 of file rect.h.

68  { // coord of left
69  return bot_left.x ();
70  }
inT16 x() const
access function
Definition: points.h:52

◆ major_overlap()

bool TBOX::major_overlap ( const TBOX &  box) const
inline

Definition at line 358 of file rect.h.

359  {
360  int overlap = MIN(box.top_right.x(), top_right.x());
361  overlap -= MAX(box.bot_left.x(), bot_left.x());
362  overlap += overlap;
363  if (overlap < MIN(box.width(), width()))
364  return false;
365  overlap = MIN(box.top_right.y(), top_right.y());
366  overlap -= MAX(box.bot_left.y(), bot_left.y());
367  overlap += overlap;
368  if (overlap < MIN(box.height(), height()))
369  return false;
370  return true;
371 }
bool overlap(const TBOX &box) const
Definition: rect.h:345
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
#define MAX(x, y)
Definition: ndminx.h:24
#define MIN(x, y)
Definition: ndminx.h:28
inT16 height() const
Definition: rect.h:104
inT16 width() const
Definition: rect.h:111

◆ major_x_overlap()

bool TBOX::major_x_overlap ( const TBOX &  box) const
inline

Definition at line 402 of file rect.h.

402  {
403  inT16 overlap = box.width();
404  if (this->left() > box.left()) {
405  overlap -= this->left() - box.left();
406  }
407  if (this->right() < box.right()) {
408  overlap -= box.right() - this->right();
409  }
410  return (overlap >= box.width() / 2 || overlap >= this->width() / 2);
411 }
bool overlap(const TBOX &box) const
Definition: rect.h:345
int16_t inT16
Definition: host.h:36
inT16 left() const
Definition: rect.h:68
inT16 right() const
Definition: rect.h:75
inT16 width() const
Definition: rect.h:111

◆ major_y_overlap()

bool TBOX::major_y_overlap ( const TBOX &  box) const
inline

Definition at line 429 of file rect.h.

429  {
430  inT16 overlap = box.height();
431  if (this->bottom() > box.bottom()) {
432  overlap -= this->bottom() - box.bottom();
433  }
434  if (this->top() < box.top()) {
435  overlap -= box.top() - this->top();
436  }
437  return (overlap >= box.height() / 2 || overlap >= this->height() / 2);
438 }
bool overlap(const TBOX &box) const
Definition: rect.h:345
int16_t inT16
Definition: host.h:36
inT16 top() const
Definition: rect.h:54
inT16 height() const
Definition: rect.h:104
inT16 bottom() const
Definition: rect.h:61

◆ move() [1/2]

void TBOX::move ( const ICOORD  vec)
inline

Definition at line 153 of file rect.h.

154  { // by vector
155  bot_left += vec;
156  top_right += vec;
157  }

◆ move() [2/2]

void TBOX::move ( const FCOORD  vec)
inline

Definition at line 159 of file rect.h.

160  { // by float vector
161  bot_left.set_x ((inT16) floor (bot_left.x () + vec.x ()));
162  // round left
163  bot_left.set_y ((inT16) floor (bot_left.y () + vec.y ()));
164  // round down
165  top_right.set_x ((inT16) ceil (top_right.x () + vec.x ()));
166  // round right
167  top_right.set_y ((inT16) ceil (top_right.y () + vec.y ()));
168  // round up
169  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
inT16 x() const
access function
Definition: points.h:52
int16_t inT16
Definition: host.h:36
inT16 y() const
access_function
Definition: points.h:56
float y() const
Definition: points.h:212
float x() const
Definition: points.h:209
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ move_bottom_edge()

void TBOX::move_bottom_edge ( const inT16  y)
inline

Definition at line 133 of file rect.h.

134  { // by +/- y
135  bot_left += ICOORD (0, y);
136  }
integer coordinate
Definition: points.h:30

◆ move_left_edge()

void TBOX::move_left_edge ( const inT16  x)
inline

Definition at line 138 of file rect.h.

139  { // by +/- x
140  bot_left += ICOORD (x, 0);
141  }
integer coordinate
Definition: points.h:30

◆ move_right_edge()

void TBOX::move_right_edge ( const inT16  x)
inline

Definition at line 143 of file rect.h.

144  { // by +/- x
145  top_right += ICOORD (x, 0);
146  }
integer coordinate
Definition: points.h:30

◆ move_top_edge()

void TBOX::move_top_edge ( const inT16  y)
inline

Definition at line 148 of file rect.h.

149  { // by +/- y
150  top_right += ICOORD (0, y);
151  }
integer coordinate
Definition: points.h:30

◆ null_box()

bool TBOX::null_box ( ) const
inline

Definition at line 46 of file rect.h.

46  { // Is box null
47  return ((left () >= right ()) || (top () <= bottom ()));
48  }
inT16 left() const
Definition: rect.h:68
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
inT16 bottom() const
Definition: rect.h:61

◆ operator==()

bool TBOX::operator== ( const TBOX &  other) const
inline

Definition at line 50 of file rect.h.

50  {
51  return bot_left == other.bot_left && top_right == other.top_right;
52  }

◆ overlap()

bool TBOX::overlap ( const TBOX &  box) const
inline

Definition at line 345 of file rect.h.

346  {
347  return ((box.bot_left.x () <= top_right.x ()) &&
348  (box.top_right.x () >= bot_left.x ()) &&
349  (box.bot_left.y () <= top_right.y ()) &&
350  (box.top_right.y () >= bot_left.y ()));
351 }
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56

◆ overlap_fraction()

double TBOX::overlap_fraction ( const TBOX &  box) const
inline

Definition at line 378 of file rect.h.

378  {
379  double fraction = 0.0;
380  if (this->area()) {
381  fraction = this->intersection(box).area() * 1.0 / this->area();
382  }
383  return fraction;
384 }
TBOX intersection(const TBOX &box) const
Definition: rect.cpp:87
inT32 area() const
Definition: rect.h:118

◆ pad()

void TBOX::pad ( int  xpad,
int  ypad 
)
inline

Definition at line 127 of file rect.h.

127  {
128  ICOORD pad(xpad, ypad);
129  bot_left -= pad;
130  top_right += pad;
131  }
void pad(int xpad, int ypad)
Definition: rect.h:127
integer coordinate
Definition: points.h:30

◆ plot() [1/2]

void TBOX::plot ( ScrollView *  fd) const
inline

Definition at line 278 of file rect.h.

279  { // where to paint
280  fd->Rectangle(bot_left.x (), bot_left.y (), top_right.x (),
281  top_right.y ());
282  }
inT16 x() const
access function
Definition: points.h:52
void Rectangle(int x1, int y1, int x2, int y2)
Definition: scrollview.cpp:606
inT16 y() const
access_function
Definition: points.h:56

◆ plot() [2/2]

void TBOX::plot ( ScrollView *  fd,
ScrollView::Color  fill_colour,
ScrollView::Color  border_colour 
) const

Definition at line 163 of file rect.cpp.

167  {
168  fd->Brush(fill_colour);
169  fd->Pen(border_colour);
170  plot(fd);
171 }
void plot(ScrollView *fd) const
Definition: rect.h:278
void Brush(Color color)
Definition: scrollview.cpp:732
void Pen(Color color)
Definition: scrollview.cpp:726

◆ print()

void TBOX::print ( ) const
inline

Definition at line 270 of file rect.h.

270  { // print
271  tprintf("Bounding box=(%d,%d)->(%d,%d)\n",
272  left(), bottom(), right(), top());
273  }
#define tprintf(...)
Definition: tprintf.h:31
inT16 left() const
Definition: rect.h:68
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
inT16 bottom() const
Definition: rect.h:61

◆ print_to_str()

void TBOX::print_to_str ( STRING *  str) const

Definition at line 175 of file rect.cpp.

175  {
176  // "(%d,%d)->(%d,%d)", left(), bottom(), right(), top()
177  str->add_str_int("(", left());
178  str->add_str_int(",", bottom());
179  str->add_str_int(")->(", right());
180  str->add_str_int(",", top());
181  *str += ')';
182 }
void add_str_int(const char *str, int number)
Definition: strngs.cpp:381
inT16 left() const
Definition: rect.h:68
inT16 top() const
Definition: rect.h:54
inT16 right() const
Definition: rect.h:75
inT16 bottom() const
Definition: rect.h:61

◆ right()

inT16 TBOX::right ( ) const
inline

Definition at line 75 of file rect.h.

75  { // coord of right
76  return top_right.x ();
77  }
inT16 x() const
access function
Definition: points.h:52

◆ rotate()

void TBOX::rotate ( const FCOORD &  vec)
inline

Definition at line 189 of file rect.h.

189  { // by vector
190  bot_left.rotate (vec);
191  top_right.rotate (vec);
192  *this = TBOX (bot_left, top_right);
193  }
void rotate(const FCOORD &vec)
Definition: ipoints.h:241
TBOX()
Definition: rect.h:32

◆ rotate_large()

void TBOX::rotate_large ( const FCOORD &  vec)

Definition at line 72 of file rect.cpp.

72  {
73  ICOORD top_left(bot_left.x(), top_right.y());
74  ICOORD bottom_right(top_right.x(), bot_left.y());
75  top_left.rotate(vec);
76  bottom_right.rotate(vec);
77  rotate(vec);
78  TBOX box2(top_left, bottom_right);
79  *this += box2;
80 }
void rotate(const FCOORD &vec)
Definition: ipoints.h:241
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
Definition: rect.h:30
void rotate(const FCOORD &vec)
Definition: rect.h:189
integer coordinate
Definition: points.h:30

◆ scale() [1/2]

void TBOX::scale ( const float  f)
inline

Definition at line 171 of file rect.h.

172  { // by multiplier
173  bot_left.set_x ((inT16) floor (bot_left.x () * f)); // round left
174  bot_left.set_y ((inT16) floor (bot_left.y () * f)); // round down
175  top_right.set_x ((inT16) ceil (top_right.x () * f)); // round right
176  top_right.set_y ((inT16) ceil (top_right.y () * f)); // round up
177  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
inT16 x() const
access function
Definition: points.h:52
int16_t inT16
Definition: host.h:36
inT16 y() const
access_function
Definition: points.h:56
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ scale() [2/2]

void TBOX::scale ( const FCOORD  vec)
inline

Definition at line 178 of file rect.h.

179  { // by float vector
180  bot_left.set_x ((inT16) floor (bot_left.x () * vec.x ()));
181  bot_left.set_y ((inT16) floor (bot_left.y () * vec.y ()));
182  top_right.set_x ((inT16) ceil (top_right.x () * vec.x ()));
183  top_right.set_y ((inT16) ceil (top_right.y () * vec.y ()));
184  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
inT16 x() const
access function
Definition: points.h:52
int16_t inT16
Definition: host.h:36
inT16 y() const
access_function
Definition: points.h:56
float y() const
Definition: points.h:212
float x() const
Definition: points.h:209
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ Serialize()

bool TBOX::Serialize ( FILE *  fp) const

Definition at line 185 of file rect.cpp.

185  {
186  if (!bot_left.Serialize(fp)) return false;
187  if (!top_right.Serialize(fp)) return false;
188  return true;
189 }
bool Serialize(FILE *fp) const
Definition: points.cpp:63

◆ set_bottom()

void TBOX::set_bottom ( int  y)
inline

Definition at line 64 of file rect.h.

64  {
65  bot_left.set_y(y);
66  }
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ set_left()

void TBOX::set_left ( int  x)
inline

Definition at line 71 of file rect.h.

71  {
72  bot_left.set_x(x);
73  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61

◆ set_right()

void TBOX::set_right ( int  x)
inline

Definition at line 78 of file rect.h.

78  {
79  top_right.set_x(x);
80  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61

◆ set_to_given_coords()

void TBOX::set_to_given_coords ( int  x_min,
int  y_min,
int  x_max,
int  y_max 
)
inline

Definition at line 263 of file rect.h.

263  {
264  bot_left.set_x(x_min);
265  bot_left.set_y(y_min);
266  top_right.set_x(x_max);
267  top_right.set_y(y_max);
268  }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ set_top()

void TBOX::set_top ( int  y)
inline

Definition at line 57 of file rect.h.

57  {
58  top_right.set_y(y);
59  }
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ top()

inT16 TBOX::top ( ) const
inline

Definition at line 54 of file rect.h.

54  { // coord of top
55  return top_right.y ();
56  }
inT16 y() const
access_function
Definition: points.h:56

◆ topleft()

ICOORD TBOX::topleft ( ) const
inline

Definition at line 96 of file rect.h.

96  { // ~ access function
97  return ICOORD (bot_left.x (), top_right.y ());
98  }
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
integer coordinate
Definition: points.h:30

◆ topright()

const ICOORD& TBOX::topright ( ) const
inline

Definition at line 100 of file rect.h.

100  { // access function
101  return top_right;
102  }

◆ width()

inT16 TBOX::width ( ) const
inline

Definition at line 111 of file rect.h.

111  { // how high is it?
112  if (!null_box ())
113  return top_right.x () - bot_left.x ();
114  else
115  return 0;
116  }
inT16 x() const
access function
Definition: points.h:52
bool null_box() const
Definition: rect.h:46

◆ x_almost_equal()

bool TBOX::x_almost_equal ( const TBOX &  box,
int  tolerance 
) const

Definition at line 253 of file rect.cpp.

253  {
254  return (abs(left() - box.left()) <= tolerance &&
255  abs(right() - box.right()) <= tolerance);
256 }
inT16 left() const
Definition: rect.h:68
inT16 right() const
Definition: rect.h:75

◆ x_gap()

int TBOX::x_gap ( const TBOX &  box) const
inline

Definition at line 217 of file rect.h.

217  {
218  return MAX(bot_left.x(), box.bot_left.x()) -
219  MIN(top_right.x(), box.top_right.x());
220  }
inT16 x() const
access function
Definition: points.h:52
#define MAX(x, y)
Definition: ndminx.h:24
#define MIN(x, y)
Definition: ndminx.h:28

◆ x_middle()

int TBOX::x_middle ( ) const
inline

Definition at line 81 of file rect.h.

81  {
82  return (bot_left.x() + top_right.x()) / 2;
83  }
inT16 x() const
access function
Definition: points.h:52

◆ x_overlap()

bool TBOX::x_overlap ( const TBOX &  box) const
inline

Definition at line 391 of file rect.h.

391  {
392  return ((box.bot_left.x() <= top_right.x()) &&
393  (box.top_right.x() >= bot_left.x()));
394 }
inT16 x() const
access function
Definition: points.h:52

◆ x_overlap_fraction()

double TBOX::x_overlap_fraction ( const TBOX &  box) const
inline

Definition at line 447 of file rect.h.

447  {
448  int low = MAX(left(), other.left());
449  int high = MIN(right(), other.right());
450  int width = right() - left();
451  if (width == 0) {
452  int x = left();
453  if (other.left() <= x && x <= other.right())
454  return 1.0;
455  else
456  return 0.0;
457  } else {
458  return MAX(0, static_cast<double>(high - low) / width);
459  }
460 }
inT16 left() const
Definition: rect.h:68
#define MAX(x, y)
Definition: ndminx.h:24
#define MIN(x, y)
Definition: ndminx.h:28
inT16 right() const
Definition: rect.h:75
inT16 width() const
Definition: rect.h:111

◆ y_gap()

int TBOX::y_gap ( const TBOX &  box) const
inline

Definition at line 225 of file rect.h.

225  {
226  return MAX(bot_left.y(), box.bot_left.y()) -
227  MIN(top_right.y(), box.top_right.y());
228  }
inT16 y() const
access_function
Definition: points.h:56
#define MAX(x, y)
Definition: ndminx.h:24
#define MIN(x, y)
Definition: ndminx.h:28

◆ y_middle()

int TBOX::y_middle ( ) const
inline

Definition at line 84 of file rect.h.

84  {
85  return (bot_left.y() + top_right.y()) / 2;
86  }
inT16 y() const
access_function
Definition: points.h:56

◆ y_overlap()

bool TBOX::y_overlap ( const TBOX &  box) const
inline

Definition at line 418 of file rect.h.

418  {
419  return ((box.bot_left.y() <= top_right.y()) &&
420  (box.top_right.y() >= bot_left.y()));
421 }
inT16 y() const
access_function
Definition: points.h:56

◆ y_overlap_fraction()

double TBOX::y_overlap_fraction ( const TBOX &  box) const
inline

Definition at line 469 of file rect.h.

469  {
470  int low = MAX(bottom(), other.bottom());
471  int high = MIN(top(), other.top());
472  int height = top() - bottom();
473  if (height == 0) {
474  int y = bottom();
475  if (other.bottom() <= y && y <= other.top())
476  return 1.0;
477  else
478  return 0.0;
479  } else {
480  return MAX(0, static_cast<double>(high - low) / height);
481  }
482 }
inT16 top() const
Definition: rect.h:54
#define MAX(x, y)
Definition: ndminx.h:24
#define MIN(x, y)
Definition: ndminx.h:28
inT16 height() const
Definition: rect.h:104
inT16 bottom() const
Definition: rect.h:61

Friends And Related Function Documentation

◆ operator &=

TBOX& operator&= ( TBOX &  op1,
const TBOX &  op2 
)
friend

Definition at line 230 of file rect.cpp.

230  {
231  if (op1.overlap (op2)) {
232  if (op2.bot_left.x () > op1.bot_left.x ())
233  op1.bot_left.set_x (op2.bot_left.x ());
234 
235  if (op2.top_right.x () < op1.top_right.x ())
236  op1.top_right.set_x (op2.top_right.x ());
237 
238  if (op2.bot_left.y () > op1.bot_left.y ())
239  op1.bot_left.set_y (op2.bot_left.y ());
240 
241  if (op2.top_right.y () < op1.top_right.y ())
242  op1.top_right.set_y (op2.top_right.y ());
243  }
244  else {
245  op1.bot_left.set_x (MAX_INT16);
246  op1.bot_left.set_y (MAX_INT16);
247  op1.top_right.set_x (-MAX_INT16);
248  op1.top_right.set_y (-MAX_INT16);
249  }
250  return op1;
251 }
bool overlap(const TBOX &box) const
Definition: rect.h:345
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
#define MAX_INT16
Definition: host.h:61
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

◆ operator+=

TBOX& operator+= ( TBOX &  op1,
const TBOX &  op2 
)
friend

Definition at line 205 of file rect.cpp.

207  {
208  if (op2.bot_left.x () < op1.bot_left.x ())
209  op1.bot_left.set_x (op2.bot_left.x ());
210 
211  if (op2.top_right.x () > op1.top_right.x ())
212  op1.top_right.set_x (op2.top_right.x ());
213 
214  if (op2.bot_left.y () < op1.bot_left.y ())
215  op1.bot_left.set_y (op2.bot_left.y ());
216 
217  if (op2.top_right.y () > op1.top_right.y ())
218  op1.top_right.set_y (op2.top_right.y ());
219 
220  return op1;
221 }
void set_x(inT16 xin)
rewrite function
Definition: points.h:61
inT16 x() const
access function
Definition: points.h:52
inT16 y() const
access_function
Definition: points.h:56
void set_y(inT16 yin)
rewrite function
Definition: points.h:65

The documentation for this class was generated from the following files: