39 return (blob ==
nullptr)
54 if (outline ==
nullptr || outline->
loop ==
nullptr)
57 StartPoint = outline->
loop;
58 EdgePoint = StartPoint;
60 NextPoint = EdgePoint->
next;
63 if (EdgePoint->
pos.
x != NextPoint->
pos.
x ||
64 EdgePoint->
pos.
y != NextPoint->
pos.
y) {
70 MFOutline =
push(MFOutline, NewPoint);
72 EdgePoint = NextPoint;
73 }
while (EdgePoint != StartPoint);
75 if (MFOutline !=
nullptr)
94 while (outline !=
nullptr) {
96 if (mf_outline !=
nullptr)
97 mf_outlines =
push(mf_outlines, mf_outline);
98 outline = outline->
next;
135 while (EdgePoint != Outline);
148 auto Outline =
static_cast<MFOUTLINE>(arg);
153 while (Start !=
nullptr) {
198 while (Last != First);
222 while (!
PointAt(EdgePoint)->ExtremityMark)
254 }
while (EdgePoint != Outline);
283 ASSERT_HOST(!
"How did NormalizeOutlines get called in character mode?");
312 for (Current = Start; Current != End; Current =
NextPointAfter (Current))
313 PointAt (Current)->Direction = Direction;
315 PointAt (End)->PreviousDirection = Direction;
336 CurrentPoint =
PointAt(Current);
344 while (Current != First);
373 Start->
Slope = -FLT_MAX;
376 Start->
Slope = FLT_MAX;
380 Start->
Slope = Delta.
y / Delta.
x;
383 if (Start->
Slope > MinSlope) {
384 if (Start->
Slope < MaxSlope) {
393 else if (Start->
Slope < -MinSlope) {
394 if (Start->
Slope > -MaxSlope) {
402 }
else if (Delta.
y > 0) {
403 if (Start->
Slope < -MinSlope) {
404 if (Start->
Slope > -MaxSlope) {
412 }
else if (Start->
Slope > MinSlope) {
413 if (Start->
Slope < MaxSlope) {
437 InitialDirection =
PointAt (EdgePoint)->Direction;
443 }
while (
PointAt(EdgePoint)->Direction == InitialDirection &&
445 next_pt !=
nullptr && !
PointAt(next_pt)->Hidden);
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
void NormalizeOutline(MFOUTLINE Outline, float XOrigin)
void FreeOutlines(LIST Outlines)
#define set_rest(l, cell)
LIST ConvertOutlines(TESSLINE *outline, LIST mf_outlines, OUTLINETYPE outline_type)
#define DegenerateOutline(O)
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
void NormalizeOutlines(LIST Outlines, float *XScale, float *YScale)
LIST push(LIST list, void *element)
DIRECTION PreviousDirection
const int kBlnBaselineOffset
void MarkDirectionChanges(MFOUTLINE Outline)
void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)
void FreeMFOutline(void *arg)
#define NextPointAfter(E)
MFOUTLINE ConvertOutline(TESSLINE *outline)
#define MakeOutlineCircular(O)
MFEDGEPT * NewEdgePoint()
void LocalNormTransform(const TPOINT &pt, TPOINT *transformed) const
MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint)
void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, float MinSlope, float MaxSlope)
LIST ConvertBlob(TBLOB *blob)
void destroy_nodes(LIST list, void_dest destructor)