Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PDBLK Class Reference

page block More...

#include <pdblock.h>

Inheritance diagram for PDBLK:
BLOCK

List of all members.

Public Member Functions

 PDBLK ()
 empty constructor
 PDBLK (inT16 xmin, inT16 ymin, inT16 xmax, inT16 ymax)
 simple constructor
void set_sides (ICOORDELT_LIST *left, ICOORDELT_LIST *right)
 ~PDBLK ()
 destructor
POLY_BLOCKpoly_block () const
void set_poly_block (POLY_BLOCK *blk)
 set the poly block
void bounding_box (ICOORD &bottom_left, ICOORD &top_right) const
 get box
const TBOXbounding_box () const
 get real box
int index () const
void set_index (int value)
BOOL8 contains (ICOORD pt)
 is pt inside block
void move (const ICOORD vec)
 reposition block
Pix * render_mask (const FCOORD &rerotation)
void plot (ScrollView *window, inT32 serial, ScrollView::Color colour)
void show (IMAGE *image, ScrollView *window)
PDBLKoperator= (const PDBLK &source)

Protected Attributes

POLY_BLOCKhand_poly
ICOORDELT_LIST leftside
ICOORDELT_LIST rightside
TBOX box
int index_

Friends

class BLOCK_RECT_IT

Detailed Description

page block

Definition at line 35 of file pdblock.h.


Constructor & Destructor Documentation

PDBLK::PDBLK ( )
inline

empty constructor

Definition at line 41 of file pdblock.h.

{
index_ = 0;
}
PDBLK::PDBLK ( inT16  xmin,
inT16  ymin,
inT16  xmax,
inT16  ymax 
)

simple constructor

Definition at line 42 of file pdblock.cpp.

: box (ICOORD (xmin, ymin), ICOORD (xmax, ymax)) {
//boundaries
ICOORDELT_IT left_it = &leftside;
ICOORDELT_IT right_it = &rightside;
left_it.set_to_list (&leftside);
right_it.set_to_list (&rightside);
//make default box
left_it.add_to_end (new ICOORDELT (xmin, ymin));
left_it.add_to_end (new ICOORDELT (xmin, ymax));
right_it.add_to_end (new ICOORDELT (xmax, ymin));
right_it.add_to_end (new ICOORDELT (xmax, ymax));
index_ = 0;
}
PDBLK::~PDBLK ( )
inline

destructor

Definition at line 58 of file pdblock.h.

{
if (hand_poly) delete hand_poly;
}

Member Function Documentation

void PDBLK::bounding_box ( ICOORD bottom_left,
ICOORD top_right 
) const
inline

get box

Definition at line 70 of file pdblock.h.

{ //topright
bottom_left = box.botleft ();
top_right = box.topright ();
}
const TBOX& PDBLK::bounding_box ( ) const
inline

get real box

Definition at line 76 of file pdblock.h.

{
return box;
}
BOOL8 PDBLK::contains ( ICOORD  pt)

is pt inside block

Definition at line 91 of file pdblock.cpp.

{
BLOCK_RECT_IT it = this; //rectangle iterator
ICOORD bleft, tright; //corners of rectangle
for (it.start_block (); !it.cycled_rects (); it.forward ()) {
//get rectangle
it.bounding_box (bleft, tright);
//inside rect
if (pt.x () >= bleft.x () && pt.x () <= tright.x ()
&& pt.y () >= bleft.y () && pt.y () <= tright.y ())
return TRUE; //is inside
}
return FALSE; //not inside
}
int PDBLK::index ( ) const
inline

Definition at line 80 of file pdblock.h.

{
return index_;
}
void PDBLK::move ( const ICOORD  vec)

reposition block

Definition at line 115 of file pdblock.cpp.

{
ICOORDELT_IT it(&leftside);
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
*(it.data ()) += vec;
it.set_to_list (&rightside);
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
*(it.data ()) += vec;
box.move (vec);
}
PDBLK & PDBLK::operator= ( const PDBLK source)

assignment

Parameters:
sourcefrom this

Definition at line 269 of file pdblock.cpp.

{
// this->ELIST_LINK::operator=(source);
if (!leftside.empty ())
leftside.clear ();
if (!rightside.empty ())
rightside.clear ();
leftside.deep_copy(&source.leftside, &ICOORDELT::deep_copy);
box = source.box;
return *this;
}
void PDBLK::plot ( ScrollView window,
inT32  serial,
ScrollView::Color  colour 
)

draw histogram

Parameters:
windowwindow to draw in
serialserial number
colourcolour to draw in

Definition at line 181 of file pdblock.cpp.

{
ICOORD startpt; //start of outline
ICOORD endpt; //end of outline
ICOORD prevpt; //previous point
ICOORDELT_IT it = &leftside; //iterator
//set the colour
window->Pen(colour);
window->TextAttributes("Times", BLOCK_LABEL_HEIGHT, false, false, false);
if (hand_poly != NULL) {
hand_poly->plot(window, serial);
} else if (!leftside.empty ()) {
startpt = *(it.data ()); //bottom left corner
// tprintf("Block %d bottom left is (%d,%d)\n",
// serial,startpt.x(),startpt.y());
char temp_buff[34];
#ifdef __UNIX__
sprintf(temp_buff, INT32FORMAT, serial);
#else
ultoa (serial, temp_buff, 10);
#endif
window->Text(startpt.x (), startpt.y (), temp_buff);
window->SetCursor(startpt.x (), startpt.y ());
do {
prevpt = *(it.data ()); //previous point
it.forward (); //move to next point
//draw round corner
window->DrawTo(prevpt.x (), it.data ()->y ());
window->DrawTo(it.data ()->x (), it.data ()->y ());
}
while (!it.at_last ()); //until end of list
endpt = *(it.data ()); //end point
//other side of boundary
window->SetCursor(startpt.x (), startpt.y ());
it.set_to_list (&rightside);
prevpt = startpt;
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
//draw round corner
window->DrawTo(prevpt.x (), it.data ()->y ());
window->DrawTo(it.data ()->x (), it.data ()->y ());
prevpt = *(it.data ()); //previous point
}
//close boundary
window->DrawTo(endpt.x(), endpt.y());
}
}
POLY_BLOCK* PDBLK::poly_block ( ) const
inline

Definition at line 62 of file pdblock.h.

{
return hand_poly;
}
Pix * PDBLK::render_mask ( const FCOORD rerotation)

Definition at line 133 of file pdblock.cpp.

{
TBOX rotated_box(box);
rotated_box.rotate(rerotation);
Pix* pix = pixCreate(rotated_box.width(), rotated_box.height(), 1);
if (hand_poly != NULL) {
// We are going to rotate, so get a deep copy of the points and
// make a new POLY_BLOCK with it.
ICOORDELT_LIST polygon;
polygon.deep_copy(hand_poly->points(), ICOORDELT::deep_copy);
POLY_BLOCK image_block(&polygon, hand_poly->isA());
image_block.rotate(rerotation);
// Block outline is a polygon, so use a PB_LINE_IT to get the
// rasterized interior. (Runs of interior pixels on a line.)
PB_LINE_IT *lines = new PB_LINE_IT(&image_block);
for (int y = box.bottom(); y < box.top(); ++y) {
ICOORDELT_LIST* segments = lines->get_line(y);
if (!segments->empty()) {
ICOORDELT_IT s_it(segments);
// Each element of segments is a start x and x size of the
// run of interior pixels.
for (s_it.mark_cycle_pt(); !s_it.cycled_list(); s_it.forward()) {
int start = s_it.data()->x();
int xext = s_it.data()->y();
// Set the run of pixels to 1.
pixRasterop(pix, start - rotated_box.left(),
rotated_box.height() - 1 - (y - rotated_box.bottom()),
xext, 1, PIX_SET, NULL, 0, 0);
}
}
delete segments;
}
delete lines;
} else {
// Just fill the whole block as there is only a bounding box.
pixRasterop(pix, 0, 0, rotated_box.width(), rotated_box.height(),
PIX_SET, NULL, 0, 0);
}
return pix;
}
void PDBLK::set_index ( int  value)
inline

Definition at line 83 of file pdblock.h.

{
index_ = value;
}
void PDBLK::set_poly_block ( POLY_BLOCK blk)
inline

set the poly block

Definition at line 66 of file pdblock.h.

{
hand_poly = blk;
}
void PDBLK::set_sides ( ICOORDELT_LIST *  left,
ICOORDELT_LIST *  right 
)

set vertex lists

Parameters:
leftlist of left vertices
rightlist of right vertices

Definition at line 68 of file pdblock.cpp.

{
//boundaries
ICOORDELT_IT left_it = &leftside;
ICOORDELT_IT right_it = &rightside;
leftside.clear ();
left_it.move_to_first ();
left_it.add_list_before (left);
rightside.clear ();
right_it.move_to_first ();
right_it.add_list_before (right);
}
void PDBLK::show ( IMAGE image,
ScrollView window 
)

show image

Parameters:
imageimage to show
windowwindow to show in

Definition at line 244 of file pdblock.cpp.

{
BLOCK_RECT_IT it = this; //rectangle iterator
ICOORD bleft, tright; //corners of rectangle
for (it.start_block (); !it.cycled_rects (); it.forward ()) {
//get rectangle
it.bounding_box (bleft, tright);
// tprintf("Drawing a block with a bottom left of (%d,%d)\n",
// bleft.x(),bleft.y());
//show it
sv_show_sub_image (image, bleft.x (), bleft.y (), tright.x () - bleft.x (), tright.y () - bleft.y (), window, bleft.x (), bleft.y ());
}
}

Friends And Related Function Documentation

friend class BLOCK_RECT_IT
friend

Reimplemented in BLOCK.

Definition at line 37 of file pdblock.h.


Member Data Documentation

TBOX PDBLK::box
protected

Definition at line 120 of file pdblock.h.

POLY_BLOCK* PDBLK::hand_poly
protected

Definition at line 117 of file pdblock.h.

int PDBLK::index_
protected

Definition at line 121 of file pdblock.h.

ICOORDELT_LIST PDBLK::leftside
protected

Definition at line 118 of file pdblock.h.

ICOORDELT_LIST PDBLK::rightside
protected

Definition at line 119 of file pdblock.h.


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