Tesseract
3.02
|
#include <polyblk.h>
Public Member Functions | |
PB_LINE_IT (POLY_BLOCK *blkptr) | |
void | set_to_block (POLY_BLOCK *blkptr) |
POLY_BLOCK::reflect_in_y_axis | |
Reflect the coords of the polygon in the y-axis. (Flip the sign of x.) | |
ICOORDELT_LIST * | get_line (inT16 y) |
PB_LINE_IT::PB_LINE_IT | ( | POLY_BLOCK * | blkptr | ) | [inline] |
ICOORDELT_LIST * PB_LINE_IT::get_line | ( | inT16 | y | ) |
Definition at line 344 of file polyblk.cpp.
{ ICOORDELT_IT v, r; ICOORDELT_LIST *result; ICOORDELT *x, *current, *previous; float fy, fx; fy = (float) (y + 0.5); result = new ICOORDELT_LIST (); r.set_to_list (result); v.set_to_list (block->points ()); for (v.mark_cycle_pt (); !v.cycled_list (); v.forward ()) { if (((v.data_relative (-1)->y () > y) && (v.data ()->y () <= y)) || ((v.data_relative (-1)->y () <= y) && (v.data ()->y () > y))) { previous = v.data_relative (-1); current = v.data (); fx = (float) (0.5 + previous->x () + (current->x () - previous->x ()) * (fy - previous->y ()) / (current->y () - previous->y ())); x = new ICOORDELT ((inT16) fx, 0); r.add_to_end (x); } } if (!r.empty ()) { r.sort (lessthan); for (r.mark_cycle_pt (); !r.cycled_list (); r.forward ()) x = r.data (); for (r.mark_cycle_pt (); !r.cycled_list (); r.forward ()) { r.data ()->set_y (r.data_relative (1)->x () - r.data ()->x ()); r.forward (); delete (r.extract ()); } } return result; }
void PB_LINE_IT::set_to_block | ( | POLY_BLOCK * | blkptr | ) | [inline] |