tesseract v5.3.3.20231005
polyblk.h
Go to the documentation of this file.
1/**********************************************************************
2 * File: polyblk.h (Formerly poly_block.h)
3 * Description: Polygonal blocks
4 *
5 * (C) Copyright 1993, Hewlett-Packard Ltd.
6 ** Licensed under the Apache License, Version 2.0 (the "License");
7 ** you may not use this file except in compliance with the License.
8 ** You may obtain a copy of the License at
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 *
16 **********************************************************************/
17
18#ifndef POLYBLK_H
19#define POLYBLK_H
20
21#include "elst.h"
22#include "points.h"
23#include "rect.h"
24#include "scrollview.h"
25
27
28namespace tesseract {
29
31public:
32 POLY_BLOCK() = default;
33 // Initialize from box coordinates.
34 POLY_BLOCK(const TBOX &tbox, PolyBlockType type);
35 POLY_BLOCK(ICOORDELT_LIST *points, PolyBlockType type);
36 ~POLY_BLOCK() = default;
37
38 TBOX *bounding_box() { // access function
39 return &box;
40 }
41
42 ICOORDELT_LIST *points() { // access function
43 return &vertices;
44 }
45
46 void compute_bb();
47
49 return type;
50 }
51
52 bool IsText() const {
53 return PTIsTextType(type);
54 }
55
56 // Rotate about the origin by the given rotation. (Analogous to
57 // multiplying by a complex number.
58 void rotate(FCOORD rotation);
59 // Reflect the coords of the polygon in the y-axis. (Flip the sign of x.)
60 void reflect_in_y_axis();
61 // Move by adding shift to all coordinates.
62 void move(ICOORD shift);
63
64#ifndef GRAPHICS_DISABLED
65
66 void plot(ScrollView *window, int32_t num);
67
68 void fill(ScrollView *window, ScrollView::Color colour);
69#endif // !GRAPHICS_DISABLED
70
71 // Returns true if other is inside this.
72 bool contains(POLY_BLOCK *other);
73
74 // Returns true if the polygons of other and this overlap.
75 bool overlap(POLY_BLOCK *other);
76
77 // Returns the winding number of this around the test_pt.
78 // Positive for anticlockwise, negative for clockwise, and zero for
79 // test_pt outside this.
80 int16_t winding_number(const ICOORD &test_pt);
81
82#ifndef GRAPHICS_DISABLED
83 // Static utility functions to handle the PolyBlockType.
84 // Returns a color to draw the given type.
85 static ScrollView::Color ColorForPolyBlockType(PolyBlockType type);
86#endif // !GRAPHICS_DISABLED
87
88private:
89 ICOORDELT_LIST vertices; // vertices
90 TBOX box; // bounding box
91 PolyBlockType type; // Type of this region.
92};
93
94// Class to iterate the scanlines of a polygon.
96public:
98 block = blkptr;
99 }
100
101 void set_to_block(POLY_BLOCK *blkptr) {
102 block = blkptr;
103 }
104
105 // Returns a list of runs of pixels for the given y coord.
106 // Each element of the returned list is the start (x) and extent(y) of
107 // a run inside the region.
108 // Delete the returned list after use.
109 ICOORDELT_LIST *get_line(TDimension y);
110
111private:
112 POLY_BLOCK *block;
113};
114
115} // namespace tesseract
116
117#endif
const double y
int16_t TDimension
Definition: tesstypes.h:32
bool PTIsTextType(PolyBlockType type)
Definition: publictypes.h:80
bool contains(const std::vector< T > &data, const T &value)
Definition: helpers.h:39
type
Definition: upload.py:458
integer coordinate
Definition: points.h:36
ICOORDELT_LIST * points()
Definition: polyblk.h:42
PolyBlockType isA() const
Definition: polyblk.h:48
TBOX * bounding_box()
Definition: polyblk.h:38
bool IsText() const
Definition: polyblk.h:52
void set_to_block(POLY_BLOCK *blkptr)
Definition: polyblk.h:101
PB_LINE_IT(POLY_BLOCK *blkptr)
Definition: polyblk.h:97
ICOORDELT_LIST * get_line(TDimension y)
Definition: polyblk.cpp:337
#define TESS_API
Definition: export.h:32