35 "Slope below which lines are called horizontal");
37 "Slope above which lines are called vertical");
64 LIST RemainingOutlines;
67 if (Blob !=
nullptr) {
70 RemainingOutlines = Outlines;
76 RemainingOutlines = Outlines;
107 return (MicroFeatures);
113 if (!
PointAt(Current)->Hidden) {
115 if (NewFeature !=
nullptr)
116 MicroFeatures =
push (MicroFeatures, NewFeature);
120 while (Last != First);
122 return (MicroFeatures);
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
float NormalizedAngleFrom(FPOINT *Point1, FPOINT *Point2, float FullScale)
void FreeOutlines(LIST Outlines)
double classify_max_slope
#define double_VAR(name, val, comment)
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
#define DegenerateOutline(O)
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
MICROFEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &cn_denorm)
LIST push(LIST list, void *element)
double classify_min_slope
float DistanceBetween(FPOINT A, FPOINT B)
MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End)
MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline, MICROFEATURES MicroFeatures)
void MarkDirectionChanges(MFOUTLINE Outline)
MICROFEATURE NewMicroFeature()
LIST ConvertBlob(TBLOB *blob)