tesseract  4.1.1
split.h File Reference
#include "blobs.h"
#include "params.h"
#include "rect.h"

Go to the source code of this file.

Classes

struct  SPLIT
 

Functions

EDGEPTmake_edgept (int x, int y, EDGEPT *next, EDGEPT *prev)
 
void remove_edgept (EDGEPT *point)
 

Variables

bool wordrec_display_splits = 0
 

Function Documentation

◆ make_edgept()

EDGEPT* make_edgept ( int  x,
int  y,
EDGEPT next,
EDGEPT prev 
)

Definition at line 139 of file split.cpp.

139  {
140  EDGEPT *this_edgept;
141  /* Create point */
142  this_edgept = new EDGEPT;
143  this_edgept->pos.x = x;
144  this_edgept->pos.y = y;
145  // Now deal with the src_outline steps.
146  C_OUTLINE* prev_ol = prev->src_outline;
147  if (prev_ol != nullptr && prev->next == next) {
148  // Compute the fraction of the segment that is being cut.
149  FCOORD segment_vec(next->pos.x - prev->pos.x, next->pos.y - prev->pos.y);
150  FCOORD target_vec(x - prev->pos.x, y - prev->pos.y);
151  double cut_fraction = target_vec.length() / segment_vec.length();
152  // Get the start and end at the step level.
153  ICOORD step_start = prev_ol->position_at_index(prev->start_step);
154  int end_step = prev->start_step + prev->step_count;
155  int step_length = prev_ol->pathlength();
156  ICOORD step_end = prev_ol->position_at_index(end_step % step_length);
157  ICOORD step_vec = step_end - step_start;
158  double target_length = step_vec.length() * cut_fraction;
159  // Find the point on the segment that gives the length nearest to target.
160  int best_step = prev->start_step;
161  ICOORD total_step(0, 0);
162  double best_dist = target_length;
163  for (int s = prev->start_step; s < end_step; ++s) {
164  total_step += prev_ol->step(s % step_length);
165  double dist = fabs(target_length - total_step.length());
166  if (dist < best_dist) {
167  best_dist = dist;
168  best_step = s + 1;
169  }
170  }
171  // The new point is an intermediate point.
172  this_edgept->src_outline = prev_ol;
173  this_edgept->step_count = end_step - best_step;
174  this_edgept->start_step = best_step % step_length;
175  prev->step_count = best_step - prev->start_step;
176  } else {
177  // The new point is poly only.
178  this_edgept->src_outline = nullptr;
179  this_edgept->step_count = 0;
180  this_edgept->start_step = 0;
181  }
182  /* Hook it up */
183  this_edgept->next = next;
184  this_edgept->prev = prev;
185  prev->next = this_edgept;
186  next->prev = this_edgept;
187  /* Set up vec entries */
188  this_edgept->vec.x = this_edgept->next->pos.x - x;
189  this_edgept->vec.y = this_edgept->next->pos.y - y;
190  this_edgept->prev->vec.x = x - this_edgept->prev->pos.x;
191  this_edgept->prev->vec.y = y - this_edgept->prev->pos.y;
192  return this_edgept;
193 }

◆ remove_edgept()

void remove_edgept ( EDGEPT point)

Definition at line 200 of file split.cpp.

200  {
201  EDGEPT *prev = point->prev;
202  EDGEPT *next = point->next;
203  // Add point's steps onto prev's steps if they are from the same outline.
204  if (prev->src_outline == point->src_outline && prev->src_outline != nullptr) {
205  prev->step_count += point->step_count;
206  }
207  prev->next = next;
208  next->prev = prev;
209  prev->vec.x = next->pos.x - prev->pos.x;
210  prev->vec.y = next->pos.y - prev->pos.y;
211  delete point;
212 }

Variable Documentation

◆ wordrec_display_splits

bool wordrec_display_splits = 0

"Display splits"

Definition at line 41 of file split.cpp.

FCOORD
Definition: points.h:189
EDGEPT::prev
EDGEPT * prev
Definition: blobs.h:193
EDGEPT
Definition: blobs.h:99
EDGEPT::vec
VECTOR vec
Definition: blobs.h:187
TPOINT::y
int16_t y
Definition: blobs.h:94
C_OUTLINE::step
ICOORD step(int index) const
Definition: coutln.h:144
C_OUTLINE::pathlength
int32_t pathlength() const
Definition: coutln.h:135
ICOORD
integer coordinate
Definition: points.h:32
C_OUTLINE::position_at_index
ICOORD position_at_index(int index) const
Definition: coutln.h:153
EDGEPT::step_count
int step_count
Definition: blobs.h:197
TPOINT::x
int16_t x
Definition: blobs.h:93
EDGEPT::src_outline
C_OUTLINE * src_outline
Definition: blobs.h:194
EDGEPT::pos
TPOINT pos
Definition: blobs.h:186
EDGEPT::next
EDGEPT * next
Definition: blobs.h:192
ICOORD::length
float length() const
find length
Definition: points.h:78
EDGEPT::start_step
int start_step
Definition: blobs.h:196
C_OUTLINE
Definition: coutln.h:72